Change buffering strategy  buffer reader, not input stream

Applying buffering to the input stream rather than the reader uses a lot of cpu time in character set decoding. 

This was masked when using JavaCC's streams