Создает ли Java Scanner неявно буфер, даже если вы ему его не передаете?

StackOverflow https://stackoverflow.com/questions/1341345

  •  20-09-2019
  •  | 
  •  

Вопрос

Если у меня есть следующий пример файла, где каждое число представляет собой байт (123 содержит байты 1, 2 и 3):

123456789

Допустим, я создаю FileInputStream.Это считывается в двоичном формате байт за байтом.Итак .read() возвращает 1, затем 2 и т.д.Теперь предположим, что я создаю буфер.Начальный фрагмент, который он считывает (если я правильно понимаю буферы), равен 1-5.Это позволяет ему не только считывать байт за байтом, но и в случае символов целые строки и т.д.Но если я снова нажму .read(), я начну с 6, а НЕ с того места, где остановился BufferedReader (поэтому, если 3 - это разрыв строки, и я сказал BufferedReader напечатать первую строку, он напечатает 1-2, а затем с помощью .read() из FileInputStream я получу 6, а не 3.)

Чтобы иметь возможность анализировать данные по разделителю, создает ли сканер неявно буфер, подобный тому, как BufferedReader создает буфер, чтобы он мог находить разрывы строк и т.д.?И если я передам отдельный FileInputStream в сканер, использование .read() НЕ будет печатать первый байт после первого разделителя, найденного сканером, а скорее в конце "фрагмента", взятого сканером?

Это было полезно?

Решение

ДА.

Из java.util.Scanner код:

// Internal buffer used to hold input
private CharBuffer buf;

// Size of internal character buffer
private static final int BUFFER_SIZE = 1024; // change to 1024;

Другие советы

Это не очевидно, но если вы внимательно посмотрите на документ API Scanner, вы увидите, что он основан на Readable интерфейс - и единственный метод в этом интерфейсе основан на буфере.Так что да, Scanner неявно создает буфер.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top