/ / Uno scanner Java crea implicitamente un buffer anche se non lo si supera? - java, buffer, java.util.scanner

Uno scanner Java crea implicitamente un buffer anche se non lo passi? - java, buffer, java.util.scanner

Se ho il seguente file di esempio in cui ogni numero rappresenta un byte (123 ha byte 1, 2 e 3):

123456789

Diciamo che creo un FileInputStream. Questo legge nel byte binario per byte. Così .read () restituisce 1, quindi 2, ecc. Ora diciamo che creo un buffer. Il blocco iniziale che legge (se ho capito bene i buffer) è 1-5. Ciò gli permette di leggere non solo in byte per byte, ma nel caso di caratteri intere linee, ecc. Ma se premo di nuovo .read (), inizio a 6, e NON dove BufferedReader si è fermato (quindi se 3 è un'interruzione di riga e ho detto a BufferedReader di stampa la prima riga, stampa 1-2, quindi usa .read () da FileInputStream mi dà 6 e non 3.)

Al fine di essere in grado di analizzare i dati daldelimitatore, uno Scanner crea implicitamente un buffer come un BufferedReader crea un buffer in modo che possa trovare interruzioni di riga, ecc.? E se passo uno FileInputStream separato nello Scanner, usando .read () NON stamperò il primo byte successivo al primo delimitatore trovato dallo scanner, ma piuttosto alla fine del "blocco" che lo scanner ha preso?

risposte:

4 per risposta № 1

.

Dal java.util.Scanner codice:

// 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 per risposta № 2

Non è ovvio, ma se si guarda attentamente l'API doc di Scanner, si vede che è basato su Readable interfaccia - e l'unico metodo in quell'interfaccia è basato su un buffer. Quindi sì, Scanner crea implicitamente un buffer.