tipos - paquetes en java pdf
¿Cuál es el uso exacto del paquete java nio cuando ya hay métodos disponibles con el paquete io? (5)
Estaba aprendiendo el paquete java nio y me di cuenta de que ya hay muchos métodos proporcionados por File que nio.Files proporciona nuevamente al usar la clase Path. Al igual que pocos más tengo. En realidad no entiendo cuál es el uso real del paquete nio.
Simplemente soy muy nuevo en este paquete, por lo que mi pregunta es incorrecta, pero un poco de ayuda me puede ayudar a leer más.
Casi todos los métodos en java.io.File
tienen problemas que no pueden solucionarse por razones de compatibilidad, el más obvio es que los métodos devuelven un valor boolean
cuando fallan. Estos problemas, más el deseo de admitir sistemas de archivos conectables y muchas otras cosas requerían el desarrollo de una API de sistema de archivos completamente nueva, por lo que se creó java.nio.File
.
En la programación de Java, la E / S se ha llevado a cabo recientemente utilizando una metáfora de flujo. Todas las E / S se ven como el movimiento de bytes individuales, uno a la vez, a través de un objeto llamado Stream. Stream I / O se utiliza para contactar con el mundo exterior. También se usa internamente, para convertir objetos en bytes y luego en objetos.
NIO tiene la misma función y propósito que la E / S original, pero utiliza una metáfora diferente: bloque de E / S. La API java.nio (nueva / sin bloqueo I / O) se introdujo con JDK1.4.
¿Cuál es la diferencia entre el flujo de E / S y el bloque de E / S?
Un sistema de E / S orientado al flujo trata con los datos un byte a la vez. Un flujo de entrada produce un byte de datos y un flujo de salida consume un byte de datos. Es muy fácil crear filtros para datos transmitidos. También es relativamente simple encadenar varios filtros para que cada uno haga su parte en lo que equivale a un mecanismo de procesamiento único y sofisticado. Por otro lado, la E / S orientada a flujos es a menudo bastante lenta.
Un sistema de E / S orientado a bloques se ocupa de los datos en bloques. Cada operación produce o consume un bloque de datos en un solo paso. El procesamiento de datos por el bloque puede ser mucho más rápido que procesarlo por el byte (transmitido). Pero la E / S orientada a bloques carece de la elegancia y la simplicidad de las E / S orientadas a flujos.
¿Cuándo debería usar java.io y cuándo debería preferir java.nio?
La escalabilidad probablemente impulsará su elección de paquete. java.net requerirá un hilo por socket. La codificación será significativamente más fácil. java.nio es mucho más eficiente, pero es difícil de codificar.
Puede obtener una mejor escalabilidad una vez que esté tratando con decenas de miles de conexiones, pero a un menor número probablemente obtendrá un mejor rendimiento con el bloqueo de IO.
Cuando trabajar con SSL java.nio no es algo fácil de tratar
Importante: si está trabajando con alguno de los paquetes, no es una buena idea crear el marco desde cero hasta que tenga una razón convincente para hacerlo.
Para java.nio, los proyectos como Grizzly y Quick Server proporcionan componentes de servidor no bloqueantes reutilizables.
Vale la pena leer puntos de dolor con java.nio
Finalmente, se reduce a los requisitos específicos de sus proyectos y lo que está tratando de lograr. Algunas de las mejores soluciones pueden no requerir la infraestructura más compleja en todo
Actualización: Recientemente descubrí el paquete NIO.2 que existe desde jdk 1.7. NIO.2 es diferente de NIO, la principal es que NIO.2 ofrece funcionalidad de canal asíncrono. Primer NIO.2
Si está trabajando con NIO, vale la pena pasar por la diferencia y cuál se adapta a su propósito.
La principal diferencia entre IO y NIO es que IO está bloqueando, mientras que NIO no está bloqueando.
Este artículo explica las diferencias en los paquetes y qué es el bloqueo y el bloqueo de IO.
NIO también introdujo canales que abstraen la especialización en Stream - File, Socket, Network.
Java NIO: Canales y Buffers
En la API de IO estándar, trabaja con flujos de bytes y flujos de caracteres. En NIO trabajas con canales y buffers. Los datos siempre se leen desde un canal a un búfer, o se escriben desde un búfer a un canal.
Java NIO: IO sin bloqueo
Java NIO le permite hacer IO sin bloqueo. Por ejemplo, un hilo puede pedir a un canal que lea datos en un búfer. Mientras el canal lee datos en el búfer, el hilo puede hacer otra cosa. Una vez que los datos se leen en el búfer, el hilo puede continuar procesándolos. Lo mismo es cierto para escribir datos en canales.
Java NIO: Selectores
Java NIO contiene el concepto de "selectores". Un selector es un objeto que puede monitorear múltiples canales para eventos (como: conexión abierta, datos recibidos, etc.). Por lo tanto, un solo hilo puede monitorear múltiples canales para datos.
Más detalles sobre orcale.