Your answer is provided in the API documentation for InputStreamReader: InputStreamReader (Java Platform SE 7 )
Each invocation of one of an InputStreamReader's read() methods may cause one or more bytes to be read from the underlying byte-input stream. To enable the efficient conversion of bytes to characters, more bytes may be read ahead from the underlying stream than are necessary to satisfy the current read operation.
For top efficiency, consider wrapping an InputStreamReader within a BufferedReader. For example:
= new BufferedReader(new InputStreamReader(System.in));
And, from the BufferedReader API: BufferedReader (Java Platform SE 7 )
Reads text from a character-input stream, buffering characters so as to provide for the efficient reading of characters, arrays, and lines.
So yes. You basically had the idea.