faster read using string buffer

read again using string buffers instead of many io calls,
as fast as your improved variant. But this needs further benchmarking.

advantage:
  - Only one read operation protected by lock, parsing outside of lock
    (This was the main reasoning for how the code was before, the slow thing
     was the slice! operation on the string buffer)

disadvantage:
  - More memory usage, two times as much (?)

@thejefflarson What do you think?