¿Un escáner de Java implícitamente crear un búfer incluso si usted no pasa que uno?

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

  •  20-09-2019
  •  | 
  •  

Pregunta

Si tengo el siguiente ejemplo de archivo donde cada número se representa un byte (123 bytes tiene 1, 2, y 3):

123456789

Digamos que creo un FileInputStream. Esto lee en el byte a byte binario. Así .read () devuelve 1, luego 2, etc. Ahora digamos que creo un búfer. El trozo inicial se lee en (si entiendo tampones correctamente) es 1-5. Esto permite que no sólo debe leer en byte a byte, pero en el caso de caracteres líneas enteras, etc. Pero si me golpeó .read () de nuevo, que comenzará a las 6, y no donde el BufferedReader parado (por lo que si 3 es una salto de línea, y me dijeron que el BufferedReader para imprimir la primera línea, imprime 1-2, y luego usando .read () desde el FileInputStream me da 6, y no 3).

Con el fin de ser capaz de analizar los datos por el delimitador, no un escáner implícitamente crear un buffer como la forma de un BufferedReader crea un búfer para que pueda encontrar los saltos de línea, etc.? Y si paso un FileInputStream separada en el escáner, utilizando .read () no se imprimirá el primer byte que sigue al primer delimitador encontró el escáner, sino más bien al final de la "porción" del escáner tomó?

¿Fue útil?

Solución

.

A partir del código 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;

Otros consejos

No es obvio, pero si nos fijamos en la documentación del API de escáner con cuidado, se ve que se basa en la interfaz Readable - y el único método en el que la interfaz se basa en un búfer. Así que sí, escáner crea implícitamente un búfer.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top