2012-02-12 12 views
5

¿Cómo implemento una función en java nio? Diga nextLineNio() que lee la siguiente línea de FileChannel de forma incremental ya que el archivo puede ser enorme, mi idea inicial era leer en un ByteBuffer de tamaño mayor que longitud máxima de una línea que podría existir y leer() desde el canal de archivos si es necesario, pero el problema que veo es cómo puedo leer la última secuencia de bytes que no termina en una nueva línea. Además, ¿cómo me aseguro de que la función nextLineNio() no falle ya que la nio api es asincrónica? ¿Alguna ayuda o implementaciones ya existentes?java nio líneas de lectura de un archivo

Gracias

Respuesta

2

Como @EJP señala, es bastante probable que obtendrá más que suficiente rendimiento utilizando BufferedReader.readLine() A menos que sepa que esto no es adecuado, esto es lo que yo sugeriría a mantener las cosas sencillo.

http://vanillajava.blogspot.com/2011/01/how-slow-can-you-readwrite-files-in.html


Me mapa de memoria todo el archivo y la búsqueda de nuevas líneas para obtener una línea a la vez. Esto evita la necesidad de preocuparse por tamaños de búfer o lecturas múltiples (o por el problema de leer demasiado)

NIO es sincrónico de forma predeterminada, el archivo IO es síncrono (hasta Java 7). Para hacer Sockets asincrónicos, debe llamar a un setter especial.

+0

No lo haría. Yo usaría un BufferedReader. No utilizaría NIO mapeado para nada, excepto un gran archivo único que iba a estar abierto durante toda la vida del programa, p. una base de datos auto implementada. – EJP

+0

@EJP, excelente punto. Debería haber preguntado si necesitas NIO en primer lugar. –

Cuestiones relacionadas