Java NIO frente a IO
Como sabemos, java NIO se introdujo para el avance de la API de IO de java convencional. Las principales mejoras que hacen que NIO sea más eficiente que IO son el modelo de flujo de datos de canal utilizado en NIO y el uso del sistema operativo para tareas de IO convencionales.
La diferencia entre Java NIO y Java IO se puede explicar de la siguiente manera:
Como se mencionó en la publicación anterior en el búfer NIO y el flujo de datos orientado al canal para operaciones de E / S que brindan una ejecución más rápida y un mejor rendimiento en comparación con IO. También NIO usa el sistema operativo para tareas de E / S convencionales, lo que nuevamente lo hace más eficiente.
Otro aspecto de la diferencia entre NIO e IO es que este IO usa flujo de datos de línea continua, es decir, un byte más a la vez y se basa en convertir objetos de datos en bytes y viceversa, mientras que NIO se ocupa de los bloques de datos que son fragmentos de bytes.
En Java, los objetos de flujo de E / S son unidireccionales, mientras que en los canales NIO son bidireccionales, lo que significa que un canal se puede utilizar tanto para leer como para escribir datos.
El flujo de datos optimizado en IO no permite avanzar y retroceder en los datos.Si es necesario avanzar y retroceder en los datos leídos de una secuencia, primero debe almacenarlos en un búfer.Mientras que en el caso de NIO, usamos búfer orientado que permite acceder a los datos de un lado a otro sin necesidad de almacenamiento en caché.
La API de NIO también admite subprocesos múltiples para que los datos se puedan leer y escribir de forma asincrónica de tal manera que mientras se realizan operaciones de E / S no se bloquee el hilo actual, lo que lo hace más eficiente que la API de E / S de Java convencional.
El concepto de subprocesos múltiples se introduce con la introducción de Selectors en java NIO que permiten escuchar múltiples canales para eventos IO de forma asincrónica o sin bloqueo.
El subproceso múltiple en NIO lo hace sin bloqueo, lo que significa que el subproceso se solicita para leer o escribir solo cuando hay datos disponibles; de lo contrario, el subproceso se puede usar en otra tarea por un tiempo, pero esto no es posible en el caso de Java IO convencional ya que no hay subprocesos múltiples se admite en él, lo que lo convierte en Bloqueo.
NIO permite administrar múltiples canales usando un solo hilo, pero el costo es que analizar los datos puede ser algo más complicado que leer datos de un flujo de bloqueo en el caso de java IO, así que en caso de que se requieran menos conexiones con un ancho de banda muy alto con el envío de una gran cantidad de datos a la vez, en este caso, la API de IO de Java podría ser la mejor opción.