/ / Czy skaner Java domyślnie tworzy bufor, nawet jeśli go nie przekazuje? - java, buffer, java.util.scanner

Czy skaner Java niejawnie tworzy bufor, nawet jeśli go nie przekazuje? - java, buffer, java.util.scanner

Jeśli mam następujący przykładowy plik, gdzie każda liczba reprezentuje bajt (123 ma bajty 1, 2 i 3):

123456789

Powiedzmy, że tworzę obiekt FileInputStream. Odczytuje w bajcie bajt po bajcie. Więc .read () zwraca 1, potem 2 itd. Teraz powiedzmy, że tworzę bufor, początkowy fragment, który odczytuje (jeśli dobrze rozumiem bufory) to 1-5. To pozwala mu nie tylko czytać bajt bajt, ale w przypadku znaków całe linie itp. Ale jeśli ponownie uderzę w .read (), zacznę od 6, a NIE w miejscu, w którym zatrzymał się BufferedReader (tak, jeśli 3 jest linią podziału, i powiedziałem BufferedReader do drukuj pierwszą linię, drukuje 1-2, a następnie używając .read () z FileInputStream daje mi 6, a nie 3.)

Aby móc analizować dane wedługseparator, czy skaner domyślnie tworzy bufor, taki jak bufor BufferedReader tworzy bufor, aby mógł znaleźć podziały wierszy itp.? A jeśli przekażę osobny plik FileInputStream do skanera, użycie .read () NIE spowoduje wydrukowania pierwszego bajtu po pierwszym ograniczniku znalezionego skanera, ale raczej na końcu "kawałka", jaki wykonał skaner?

Odpowiedzi:

4 dla odpowiedzi № 1

tak.

Od java.util.Scanner kod:

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

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

1 dla odpowiedzi nr 2

To nie jest oczywiste, ale jeśli uważnie przyjrzeć się dokumentowi API skanera, widać, że jest on oparty na Readable interfejs - a jedyna metoda w tym interfejsie oparta jest na buforze. Więc tak, Scanner domyślnie tworzy bufor.