Libraries that load the entire file into memory (most do) will have a distinct advantage over those that use streams and parse on the fly. I decided to use streams rather than loading into one big string first - because the file size is not known and there is a potential for out of memory errors - even with 64bit systems.