Pregunta

Como ahora sé, los dos métodos más comunes de lectura de datos basados en caracteres de un archivo en Java es el uso de Scanner o BufferedReader.También sé que el BufferedReader leer archivos de manera eficiente mediante el uso de un buffer para evitar física de las operaciones de disco.Mis preguntas son:

  • ¿ Scanner realiza, así como BufferedReader?
  • ¿Por qué elegir Scanner más BufferedReader o viceversa?
¿Fue útil?

Solución

Scanner se utiliza para el análisis de las fichas de los contenidos de la corriente mientras BufferedReader sólo lee la secuencia y no hace ningún tipo especial de análisis.

De hecho, usted puede pasar una BufferedReader a un scanner como la fuente de caracteres para analizar.

Otros consejos

En la actualidad la última JDK6 versión/build (b27), el Scanner tiene un tamaño de búfer más pequeño (1024 caracteres en contraposición a la BufferedReader (8192 chars), pero es más que suficiente.

En cuanto a la elección, el uso de la Scanner si quieres analizar el archivo, utilice el BufferedReader si quieres leer el archivo línea por línea.Véase también el texto introductorio de su aforelinked la documentación de la API.

  • El análisis de = la interpretación de la entrada como fichas de (partes de).Es capaz de dar la espalda partes específicas directamente como int, string, decimales, etc.Ver también a todos aquellos nextXxx() métodos en Scanner clase.
  • La lectura = tonto streaming.Se sigue dando la espalda a todos los personajes, que a su vez tiene que revisar si desea partido o componer algo útil.Pero si usted no necesita hacer eso de todos modos, entonces la lectura es suficiente.

Ver este enlace, se citó a partir de ahí:

Una clases bufferedreader es una clase simple que significaba para leer eficazmente de la subalterno corriente.En general, cada lectura hecha la petición de un Lector como un FileReader causas de la correspondiente solicitud de lectura del hecho a secuencia subyacente.Cada invocación de leer() o readLine() podría causa de bytes a leer el archivo, convertidos en personajes, y luego regresó, lo cual puede ser muy ineficiente.Se ha mejorado la eficiencia de manera apreciable, si un Lector es deformada en un clases bufferedreader.

Clases bufferedreader es sincronizados, por lo que las operaciones de lectura en clases bufferedreader con seguridad puede hacer desde varios subprocesos.

Un escáner en el otro lado tiene mucho más de queso construido en él;es puede hacer todo lo que una clases bufferedreader puede hacer y en el mismo nivel de la eficiencia también.Sin embargo, además de un Escáner puede analizar el secuencia subyacente para los tipos primitivos y cadenas de uso regular las expresiones.También puede acortar la secuencia subyacente con el delimitador de su elección.También puede hacer avanzar la digitalización de la secuencia subyacente ignorando el delimitador!

Un escáner sin embargo no es seguro para subprocesos, tiene que ser externamente sincronizados.

La opción de usar un clases bufferedreader o un Escáner depende del código está escrito, si usted está escribiendo un simple lector del registro Buffer el lector es el adecuado.Sin embargo, si usted está escribiendo un analizador XML Escáner es la opción más natural.

Aunque al leer la entrada, si quieres aceptar la entrada del usuario por línea línea y decir que acaba de añadir a un archivo, una clases bufferedreader es lo suficientemente bueno.Por otro lado, si desea aceptar la entrada del usuario como un comando con múltiples opciones y, a continuación, tiene la intención de realizar diferentes operaciones basado en el comando y las opciones especificadas, de un Escáner se adapte a mejor.

  1. BufferedReader tiene significativamente más grande que la memoria del búfer de Escáner.Uso BufferedReader si desea obtener cadenas largas de un arroyo, y el uso de Scanner si desea analizar el tipo específico de token de un arroyo.

  2. Scanner puede utilizar acortar el uso personalizado de delimitador y analizar la secuencia en los tipos primitivos de datos, mientras que BufferedReader sólo puede leer y almacenar la Cadena.

  3. BufferedReader es sincrónica, mientras que Scanner no es.Uso BufferedReader si usted está trabajando con varios subprocesos.

  4. Scanner oculta IOException mientras BufferedReader la lanza de inmediato.

Yo sugiero utilizar BufferedReader para la lectura del texto. Scanner oculta IOException mientras BufferedReader la lanza de inmediato.

La diferencia entre Clases bufferedreader y Escáner son los siguientes:

  1. Clases bufferedreader es sincronizado pero Escáner es no se sincronizan.
  2. Clases bufferedreader es seguro para subprocesos pero Escáner es no es seguro para subprocesos.
  3. Clases bufferedreader tiene más memoria de búfer pero Escáner reducir el tamaño de búfer de memoria.
  4. Clases bufferedreader es más rápido pero Escáner es más lento en la ejecución de.
  5. Código para leer una línea desde la consola:

    Clases bufferedreader:

     InputStreamReader isr=new InputStreamReader(System.in);
     BufferedReader br= new BufferedReader(isr);
     String st= br.readLine();
    

    Escáner:

    Scanner sc= new Scanner(System.in);
    String st= sc.nextLine();
    

Siguientes son las diferencias entre clases bufferedreader y Escáner

  1. Clases bufferedreader sólo lectura de los datos, pero escáner también analizar los datos.
  2. sólo puede leer la Cadena mediante clases bufferedreader, pero usted puede leer int, largo o float mediante Escáner.
  3. Clases bufferedreader es mayor de Escáner,que existe desde el jdk 1.1, mientras que Escáner fue agregado en el JDK 5 de liberación.
  4. El tamaño de Búfer de clases bufferedreader es grande(8KB) en comparación con un tamaño de 1 kb de Escáner.
  5. Clases bufferedreader es más adecuado para la lectura de archivos con Cadena larga mientras que el Escáner es más adecuado para la lectura de la pequeña entrada de usuario de símbolo del sistema.
  6. Clases bufferedreader se sincroniza pero el Escáner no está, lo que significa que no puede compartir el Escáner entre varios subprocesos.
  7. Clases bufferedreader es más rápido que el Escáner porque no pasó el tiempo en el análisis de
  8. Clases bufferedreader es un poco más rápido en comparación con Escáner
  9. Clases bufferedreader es de java.io paquete y el Escáner es de java.util paquete sobre la base de los puntos que podemos seleccionar nuestra elección.

Gracias

Las Principales Diferencias:

  1. Escáner

  • Un texto simple escáner que puede analizar los tipos primitivos y las cadenas de texto usando expresiones regulares.
  • Un Escáner rompe su entrada en fichas utilizando un patrón delimitador, que por defecto coincide con el espacio en blanco.La resultante de las fichas pueden ser convertidos en valores de los diferentes tipos de uso de los distintos métodos siguientes.

Ejemplo

 String input = "1 fish 2 fish red fish blue fish";
 Scanner s = new Scanner(input).useDelimiter("\\s*fish\\s*");
 System.out.println(s.nextInt());
 System.out.println(s.nextInt());
 System.out.println(s.next());
 System.out.println(s.next());
 s.close(); 

imprime el siguiente resultado:

 1
 2
 red
 blue 

El mismo resultado puede ser generado con este código, que utiliza una expresión regular para analizar todos los cuatro fichas a la vez:

 String input = "1 fish 2 fish red fish blue fish";

 Scanner s = new Scanner(input);
 s.findInLine("(\\d+) fish (\\d+) fish (\\w+) fish (\\w+)");
 MatchResult result = s.match();
 for (int i=1; i<=result.groupCount(); i++)
     System.out.println(result.group(i));
 s.close(); `


  1. Clases bufferedreader:

    • Lee el texto de un carácter del flujo de entrada, el almacenamiento en búfer de caracteres, así como a proporcionar para la correcta lectura de los caracteres, matrices y líneas.

    • El tamaño del búfer puede ser especificado, o el tamaño predeterminado puede ser utilizado.El valor predeterminado es lo suficientemente grande para la mayoría de propósitos.

En general, cada lectura hecha la petición de un Lector causa una solicitud de lectura de los subyacentes de carácter o secuencia de bytes.Por tanto, es recomendable envolver clases bufferedreader alrededor de cualquier Lector cuyo read() operaciones pueden ser costosos, tales como FileReaders y InputStreamReaders.Por ejemplo,

BufferedReader in
   = new BufferedReader(new FileReader("foo.in"));

se búfer de entrada desde el archivo especificado.Sin búfer, cada invocación de leer() o readLine() podría causar bytes a leer el archivo, convertidos en personajes y, a continuación, devuelve, que puede ser muy ineficiente.Los programas que utilizan DataInputStreams textuales de entrada puede ser localizada mediante la sustitución de cada DataInputStream con una adecuada clases bufferedreader.

Fuente:Enlace

Hay diferentes maneras de tomar la entrada en java como:

1) Clases Bufferedreader 2) Escáner 3) Argumentos De Línea De Comandos

Clases bufferedreader Leer el texto de un carácter del flujo de entrada, el almacenamiento en búfer de caracteres, así como a proporcionar para la correcta lectura de los caracteres, matrices y líneas.

Donde Escáner es un texto simple escáner que puede analizar los tipos primitivos y las cadenas de texto usando expresiones regulares.

si usted está escribiendo un simple lector del registro Buffer lector es la adecuada.si usted está escribiendo un analizador XML Escáner es la opción más natural.

Para más información por favor consulte:

http://java.meritcampus.com/t/240/Bufferedreader?tc=mm69

La respuesta a continuación está tomado de La lectura de la Consola:JAVA Escáner vs clases bufferedreader

Cuando se lee una entrada de la consola, hay dos opciones que existe para lograrlo.El primer uso de Scanner, otro con BufferedReader.Ambos tienen diferentes características.Esto significa que las diferencias de cómo usarlo.

Escáner de tratados de entrada como token.Clases bufferedreader acabo de leer línea por línea de entrada como de cadena.Escáner de auto proporcionar análisis de capacidades como nextInt(), nextFloat().

Pero, ¿qué es otras de las diferencias entre?

  • Escáner de tratados de entrada como token.Clases bufferedreader como línea de flujo/String
  • Escáner de símbolo (token) de entrada utilizando expresiones regulares.El uso de clases bufferedreader debe escribir código adicional
  • Clases bufferedreader más rápido que el Escáner *punto no.2
  • Escáner no está sincronizado, clases bufferedreader sincronizado

Escáner viene con el JDK desde la versión 1.5 de alto.

Cuando se debe usar el Escáner, o Tamponada Lector?

Mira las principales diferencias entre los dos de ellos, uno mediante el símbolo (token), otros el uso de línea de flujo.Cuando usted necesita el análisis de las capacidades, el uso del Escáner en su lugar.Pero, me siento más cómodo con clases bufferedreader.Cuando usted necesita para leer de un Archivo, utilice clases bufferedreader, porque es el uso de búfer cuando se lee un archivo.O usted puede utilizar clases bufferedreader como datos de entrada del Escáner.

  1. Clases bufferedreader probablemente le dará un mejor rendimiento (porque Escáner se basa en InputStreamReader, buscar fuentes). ups, para la lectura de archivos que utiliza nio.Cuando he probado nio rendimiento en contra de clases bufferedreader rendimiento para archivos de gran tamaño nio muestra un poco mejor de rendimiento.
  2. Para leer el archivo trate de Apache Commons IO.

Yo prefiero Scanner porque no lanzar excepciones comprobadas y por lo tanto su uso se traduce en una mayor racionalización de código.

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