Introducción a Java NIO con ejemplos

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, entenderemos más sobre Java NIO.

Java NIO (Nueva entrada/salida) es una estructura y una API de manejo de archivos y redes de alto rendimiento que funciona como una API IO alternativa para Java. Se introdujo a partir de JDK 4. Java NIO funciona como el segundo sistema de E/S después de Java IO estándar con algunas características avanzadas adicionales. Proporciona una forma diferente de trabajar con E/S que la E/S estándar. Al igual que el paquete Java.io , que contiene todas las clases necesarias para las operaciones de entrada y salida de Java, el paquete java.nio define las clases de búfer que se utilizan en las API de NIO. Usamos Java NIO por las siguientes dos razones principales:

  1. Operación de E/S sin bloqueo: Java NIO realiza operaciones de E/S sin bloqueo. Esto significa que lee los datos cualquiera que esté listo. Por ejemplo, un subproceso puede pedirle a un canal que lea los datos de un búfer y el subproceso puede realizar otro trabajo durante ese período y continuar nuevamente desde el punto anterior donde lo dejó. Mientras tanto, la operación de lectura está completa, lo que aumenta la eficiencia general.
  2. Enfoque orientado al búfer: el enfoque orientado al búfer de Java NIO nos permite avanzar y retroceder en el búfer según lo necesitemos. Los datos se leen en un búfer y se almacenan en caché allí. Cada vez que se requieren los datos, se procesan más desde el búfer.

El funcionamiento principal del paquete Java NIO se basa en algunos componentes básicos. Están:

  1. Búferes: Los búferes están disponibles en este paquete para los tipos de datos primitivos . Java NIO es un paquete orientado a búfer. Significa que los datos se pueden escribir/leer en/desde un búfer que luego se procesa usando un canal. Aquí, los búferes actúan como un contenedor para los datos, ya que contienen los tipos de datos primitivos y brindan una descripción general de los otros paquetes NIO. Estos búferes se pueden llenar, drenar, voltear, rebobinar, etc.
  2. Canales: Los canales son la nueva abstracción de E/S primitiva. Un canal es un poco como un flujo utilizado para comunicarse con el mundo exterior. Desde el canal, podemos leer los datos en un búfer o escribir desde un búfer. Java NIO realiza las operaciones de E/S sin bloqueo y los canales están disponibles para estas operaciones de E/S. La conexión a diferentes entidades está representada por varios canales que son capaces de realizar una operación de E/S sin bloqueo. Los canales funcionan como un medio o una puerta de enlace. La siguiente imagen ilustra la interacción entre el canal y el búfer:

  3. Selectores: Los selectores están disponibles para operaciones de E/S sin bloqueo. Un selector es un objeto que monitorea múltiples canales para los eventos. Como Java NIO realiza las operaciones de E/S sin bloqueo, los selectores y las teclas de selección con canales seleccionables definen las operaciones de E/S multiplexadas. Entonces, en palabras simples, podemos decir que los selectores se usan para seleccionar los canales que están listos para la operación de E/S. La siguiente imagen ilustra el selector manejando los canales:

Java NIO proporciona un nuevo modelo de E/S basado en canales, búferes y selectores. Por lo tanto, estos módulos se consideran el núcleo de la API. La siguiente tabla ilustra la lista de paquetes Java.nio para un sistema NIO y por qué se usan:

Paquete Objetivo
paquete java.nio Proporciona una descripción general de los otros paquetes de NIO. Este sistema NIO encapsula diferentes tipos de búfer, que se utilizan en todas las API de NIO.
paquete java.nio.channels Admite canales y selectores, que representan conexiones a entidades que esencialmente abren las conexiones de E/S y selecciona el canal listo para E/S.
paquete java.nio.channels.spi Es compatible con las clases de proveedores de servicios para el paquete java.io.channel.
paquete java.nio.file Proporciona soporte para archivos.
paquete java.nio.file.spi Es compatible con las clases de proveedores de servicios para el paquete java.io.file.
paquete java.nio.file.attribute Proporciona soporte para atributos de archivo.
paquete java.nio.charset Define conjuntos de caracteres y proporciona operaciones de codificación y decodificación para nuevos algoritmos.
paquete java.nio.charset.spi Es compatible con las clases de proveedores de servicios para el paquete java.nio.charset.

¿Por qué Java.nio.File, cuando Java.io.File ya está presente? Es una pregunta muy común por qué nos mudaremos a Java.nio.File cuando Java.io.File ya está presente. Había algunas cosas que faltaban en el antiguo Java.io.File y eso llevó al uso del nuevo Java.nio.File. Las siguientes son algunas de las cosas que faltaban en el paquete anterior y las razones por las que se usa el nuevo paquete:

  1. El antiguo módulo proporciona soporte limitado para los enlaces simbólicos.
  2. El módulo anterior brinda soporte limitado para atributos de archivos y problemas de rendimiento.
  3. El módulo anterior no funciona de manera consistente en todas las plataformas.
  4. Falta el módulo anterior con las operaciones básicas como copiar archivos, mover, etc.

Consulte este artículo para comprender la diferencia entre Java-IO y Java-NIO

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 *