BufferedReader и BufferedInputStream имеют свои собственные буферы для чтения. Является ли наличие буфера причиной того, что они могут читать строку за раз?
Scanner тоже может читать построчно. Но это не обязательно работает с BufferedReader и BufferedInputStream. Есть ли у него собственный буфер для чтения строки за раз?
Спасибо.
Если не использовать буфер, как он может собирать символы в строку?




Из документы Oracle, в частности из этой строки:
A scanner can read text from any object which implements the Readable interface. If an invocation of the underlying readable's Readable.read(java.nio.CharBuffer) method throws an IOException then the scanner assumes that the end of the input has been reached. The most recent IOException thrown by the underlying readable can be retrieved via the ioException() method.
Похоже, что у Scanner нет собственного буфера. Он использует буфер базового объекта (который реализует Readable) и использует регулярные выражения для синтаксического анализа.
Спасибо. «Он использует буфер из базового объекта (который реализует Readable)». Если базовый объект не является объектом BufferedReader, то Scannere не будет использовать какой-либо буфер пользовательского пространства?
Правильный. Он токенизирует и анализирует строку напрямую.
Как вы думаете, почему классу нужен буфер для чтения строки? Буфер используется для минимизации количества аппаратных обращений, а не для чтения строки или нет.