Pergunta

Se eu tiver o seguinte arquivo de exemplo, onde cada número é representa um byte (123 possui bytes 1, 2 e 3):

123456789

Digamos que eu crio um FileInputStream. Isso lê no byte binário byte. Então .read () retorna 1, depois 2, etc. Agora digamos que eu crie um buffer. O pedaço inicial que lê (se eu entendo os buffers corretamente) é 1-5. Isso permite que não apenas leia em byte byte, mas no caso de caracteres linhas inteiras, etc. Mas se eu bater .read () novamente, começo às 6, e não onde o leitor buffers parou (então se 3 for um quebra de linha, e eu disse ao BufferredReader para imprimir a primeira linha, ele imprime 1-2 e, em seguida, usando .read () do FileInputStream me dá 6, e não 3.)

Para poder analisar dados pelo delimitador, um scanner cria implicitamente um buffer como como um leitor de buffers cria um buffer para que ele possa encontrar quebras de linha, etc? E se eu passar por um FileInputStream separado para o scanner, usando .read () não imprimirá o primeiro byte após o primeiro delimitador que o scanner encontrou, mas no final do "pedaço" que o scanner tomou?

Foi útil?

Solução

Sim.

De java.util.Scanner código:

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

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

Outras dicas

Não é óbvio, mas se você olhar para o Doc do Scanner da API, verá que é baseado no Readable interface - e o único método nessa interface é baseado em um buffer. Então, sim, o Scanner cria implicitamente um buffer.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top