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 № 1tak.
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.