Diferencia entre Java IO y Java NIO

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:

  1. 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:

  2. 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.

  3. 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.

  4. 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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *