Hasta donde sé, los dos métodos más comunes para leer datos basados en caracteres de un archivo en Java están utilizando Scannero BufferedReader. También sé que BufferedReaderlee los archivos de manera eficiente mediante el uso de un búfer para evitar las operaciones físicas del disco.
Mis preguntas son:
- ¿
ScannerFunciona tan bien comoBufferedReader? - ¿Por qué elegirías
ScannermásBufferedReadero viceversa?
java
file-io
java.util.scanner
bufferedreader
Mads Mobæk
fuente
fuente

Respuestas:
Scannerse usa para analizar tokens del contenido de la secuencia mientrasBufferedReadersolo lee la secuencia y no realiza ningún análisis especial.De hecho, puede pasar a
BufferedReadera ascannercomo fuente de caracteres para analizar.fuente
Scannerdepende en última instancia de otra cosa para su entrada, que bien puede estar sincronizada.En la última versión / compilación de JDK6 (b27),
Scannertiene 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
Scannersi desea analizar el archivo, use elBufferedReadersi desea leer el archivo línea por línea. Consulte también el texto introductorio de sus documentaciones API anteriormente vinculadas.nextXxx()métodos enScannerclase.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.BufferedReaderen el constructor de Scanner? ¿Es esta una buena idea?ScannerEl 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 de8192caracteres (o el archivo completo si es más pequeño que eso).Vea este enlace , a continuación se cita desde allí:
fuente
BufferedReadertiene una memoria de búfer significativamente mayor que Scanner. ÚseloBufferedReadersi desea obtener cadenas largas de una secuencia, y utilíceloScannersi desea analizar un tipo específico de token de una secuencia.Scannerpuede usar tokenize usando delimitador personalizado y analizar la secuencia en tipos primitivos de datos, mientrasBufferedReaderque solo puede leer y almacenar String.BufferedReaderes sincrónico mientrasScannerque no lo es. ÚseloBufferedReadersi está trabajando con múltiples hilos.Scanneroculta IOException mientras laBufferedReaderarroja de inmediato.fuente
Sugiero usar
BufferedReaderpara leer texto.Scannerse escondeIOExceptionmientras loBufferedReadertira 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
Scannerporque no arroja excepciones marcadas y, por lo tanto, su uso da como resultado un código más simplificado.fuente