Java IO (Entrada/Salida) se utiliza para realizar operaciones de lectura y escritura. El paquete java.io contiene todas las clases requeridas para la operación de entrada y salida. Mientras que Java NIO (New IO) se introdujo a partir de JDK 4 para implementar operaciones de E/S de alta velocidad. Es una alternativa a las API estándar de IO. En este artículo, se analiza la diferencia entre estos dos paquetes de IO.
Antes de entrar en la diferencia entre Java IO y Java NIO, debemos comprender algunos conceptos clave que diferencian a ambos paquetes de E/S:
- Paquetes orientados a flujo frente a paquetes orientados a búfer:
Java IO es un paquete orientado a secuencias, lo que significa que se puede leer uno o más bytes a la vez desde una secuencia. Utiliza un flujo para transferir los datos entre la fuente/sumidero de datos y el programa java. Es una transferencia de datos unidireccional. La siguiente imagen ilustra un paquete orientado a secuencias:
A diferencia de Java IO, Java NIO es un paquete orientado a búfer. Esto significa que los datos se leen en un búfer desde el cual se procesan más utilizando un canal. Por ejemplo, un subproceso que le pide a un canal que lea datos en un búfer y mientras el canal lee datos en el búfer simultáneamente, el subproceso puede realizar otro trabajo. Una vez que los datos se leen en el búfer, el subproceso puede continuar procesando el trabajo que le quedó durante la operación de lectura. Por lo tanto, NIO es una transferencia de datos bidireccional. La siguiente imagen ilustra un paquete orientado a búfer:
- Paquetes de E/S de bloqueo frente a paquetes de E/S sin bloqueo:
Java IO es un IO de bloqueo. Esto significa que si un subproceso está invocando una operación de lectura() o escritura(), ese subproceso se bloquea hasta que haya algunos datos para leer o los datos estén completamente escritos. Es por eso que es IO síncrono o IO de bloqueo.
A diferencia de Java IO, Java NIO es un IO sin bloqueo. Esto significa que si un subproceso está invocando una operación de lectura() o escritura(), ese subproceso no se bloquea hasta que haya algunos datos para leer o los datos estén completamente escritos, en lugar de que el subproceso continúe con otra cosa. Por eso es una E/S asíncrona o una E/S sin bloqueo.
- Canales:
Un canal es un medio para la transmisión eficiente de datos entre la entidad y el búfer. Actúa como una puerta de enlace para la conexión abierta con la fuente/sumidero de datos.
- Selector:
El selector selecciona el canal entre los múltiples canales de E/S utilizando el hilo único.
La siguiente tabla ilustra las diferencias entre Java IO y Java NIO :
E/S de Java | NIO de Java |
---|---|
Java IO significa Java Entrada Salida | Java NIO significa Java Nueva Entrada Salida |
Java IO opera dentro del paquete java.io | Java NIO opera dentro del paquete java.nio |
Java IO está orientado a Stream | Java NIO está orientado a búfer |
Bloqueo de la operación de E/S | Operación de E/S sin bloqueo |
Los canales no están disponibles | Los canales están disponibles |
Se trata de datos en flujo | Se trata de datos en bloques. |
No contiene el concepto de Selectores | Contiene el concepto de Selectores |
Publicación traducida automáticamente
Artículo escrito por Satyabrata_Jena y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA