Hasta donde sé, los dos métodos más comunes para leer datos basados en caracteres de un archivo en Java están utilizando Scanner
o BufferedReader
. También sé que BufferedReader
lee los archivos de manera eficiente mediante el uso de un búfer para evitar las operaciones físicas del disco.
Mis preguntas son:
- ¿
Scanner
Funciona tan bien comoBufferedReader
? - ¿Por qué elegirías
Scanner
másBufferedReader
o viceversa?
java
file-io
java.util.scanner
bufferedreader
Mads Mobæk
fuente
fuente
Respuestas:
Scanner
se usa para analizar tokens del contenido de la secuencia mientrasBufferedReader
solo lee la secuencia y no realiza ningún análisis especial.De hecho, puede pasar a
BufferedReader
a ascanner
como fuente de caracteres para analizar.fuente
Scanner
depende en última instancia de otra cosa para su entrada, que bien puede estar sincronizada.En la última versión / compilación de JDK6 (b27),
Scanner
tiene un búfer más pequeño ( 1024 caracteres ) en comparación conBufferedReader
( 8192 caracteres ), pero es más que suficiente.En cuanto a la elección, use el
Scanner
si desea analizar el archivo, use elBufferedReader
si desea leer el archivo línea por línea. Consulte también el texto introductorio de sus documentaciones API anteriormente vinculadas.nextXxx()
métodos enScanner
clase.fuente
readInt();
readFloat (); etc. Ahora tengo lo que es el medio de análisis. y BalusC, ¿puedes darme poco tiempo solo 10 minutos en la sala de chat? Quiero preguntar un poco sobre el almacenamiento intermedio, cómo funciona.BufferedReader
en el constructor de Scanner? ¿Es esta una buena idea?Scanner
El búfer se expandirá según sea necesario para la coincidencia de patrones. Entonces, si desea un búfer más grande, solo necesita invocar, por ejemplofindWithinHorizon("\\z", 8192)
, en él y luego, usará un búfer con capacidad de8192
caracteres (o el archivo completo si es más pequeño que eso).Vea este enlace , a continuación se cita desde allí:
fuente
BufferedReader
tiene una memoria de búfer significativamente mayor que Scanner. ÚseloBufferedReader
si desea obtener cadenas largas de una secuencia, y utilíceloScanner
si desea analizar un tipo específico de token de una secuencia.Scanner
puede usar tokenize usando delimitador personalizado y analizar la secuencia en tipos primitivos de datos, mientrasBufferedReader
que solo puede leer y almacenar String.BufferedReader
es sincrónico mientrasScanner
que no lo es. ÚseloBufferedReader
si está trabajando con múltiples hilos.Scanner
oculta IOException mientras laBufferedReader
arroja de inmediato.fuente
Sugiero usar
BufferedReader
para leer texto.Scanner
se escondeIOException
mientras loBufferedReader
tira de inmediato.fuente
Las diferencias entre BufferedReader y Scanner son las siguientes:
Código para leer una línea desde la consola:
BufferedReader :
Escáner :
fuente
Las siguientes son las diferencias entre BufferedReader y Scanner
Gracias
fuente
Las principales diferencias:
Ejemplo
imprime el siguiente resultado:
Se puede generar la misma salida con este código, que utiliza una expresión regular para analizar los cuatro tokens a la vez:
BufferedReader:
Lee texto de una secuencia de entrada de caracteres, almacenando caracteres en búfer para proporcionar una lectura eficiente de caracteres, matrices y líneas.
Se puede especificar el tamaño del búfer o se puede usar el tamaño predeterminado. El valor predeterminado es lo suficientemente grande para la mayoría de los propósitos.
En general, cada solicitud de lectura realizada por un lector hace que se realice una solicitud de lectura correspondiente del carácter subyacente o flujo de bytes. Por lo tanto, es aconsejable envolver un BufferedReader alrededor de cualquier lector cuyas operaciones read () puedan ser costosas, como FileReaders y InputStreamReaders. Por ejemplo,
almacenará en búfer la entrada del archivo especificado. Sin almacenamiento en búfer, cada invocación de read () o readLine () podría hacer que los bytes se lean del archivo, se conviertan en caracteres y luego se devuelvan, lo que puede ser muy ineficiente. Los programas que usan DataInputStreams para la entrada de texto se pueden localizar reemplazando cada DataInputStream con un BufferedReader apropiado.
Fuente: Enlace
fuente
Hay diferentes formas de tomar entrada en Java como:
1) BufferedReader 2) Escáner 3) Argumentos de línea de comando
BufferedReader Lee el texto de una secuencia de entrada de caracteres, almacenando caracteres en búfer para proporcionar una lectura eficiente de caracteres, matrices y líneas.
Where Scanner es un escáner de texto simple que puede analizar tipos y cadenas primitivos utilizando expresiones regulares.
si está escribiendo un lector de registro simple El lector con buffer es adecuado. Si está escribiendo un analizador XML, el escáner es la opción más natural.
Para más información, consulte:
http://java.meritcampus.com/t/240/Bufferedreader?tc=mm69
fuente
La siguiente respuesta está tomada de la lectura desde la consola: JAVA Scanner vs BufferedReader
Cuando se lee una entrada desde la consola, existen dos opciones para lograrlo. Primero usando
Scanner
, otro usandoBufferedReader
. Ambos tienen características diferentes. Significa diferencias en cómo usarlo.El escáner trató la entrada dada como token. BufferedReader solo lee línea por línea la entrada dada como cadena. El escáner proporciona capacidades de análisis al igual que nextInt (), nextFloat ().
Pero, ¿entre qué hay otras diferencias?
El escáner viene con JDK versión 1.5 superior.
¿Cuándo se debe usar el escáner o el lector protegido?
Observe las principales diferencias entre ambos, uno con tokenizado y otros con línea de transmisión. Cuando necesite capacidades de análisis, use Scanner en su lugar. Pero, estoy más cómodo con BufferedReader. Cuando necesite leer un archivo, use BufferedReader, porque es usar buffer cuando lee un archivo. O puede usar BufferedReader como entrada al escáner.
fuente
BufferedReader probablemente le brindará un mejor rendimiento (porque Scanner se basa en InputStreamReader, consulte las fuentes).ups, para leer archivos utiliza nio. Cuando probé el rendimiento de nio contra el rendimiento de BufferedReader para archivos grandes, nio muestra un rendimiento un poco mejor.fuente
Prefiero
Scanner
porque no arroja excepciones marcadas y, por lo tanto, su uso da como resultado un código más simplificado.fuente