Thanks for the valuable suggestions. Another challenge to this problem is that the data files are multi-line records. For example, if a line or row is a parent, then it is followed by a number of component rows. I am thinking of extending the basic data parser to multi-row parser and return the complete parent record (containing its component records) to the client for each next() call. What do you think about this approach? Another issue is validation. I noticed that unpack fails silently if there is a problem in parsing. So I would like to set up some sort of validation for the lines too. That should probably go in the spec for the record and be specified as a regex pattern.