java io nio difference

Java: ¿cuál es exactamente la diferencia entre NIO y NIO.2?



difference (2)

No entiendo lo diferentes que son entre sí, así que tengo algunas preguntas con respecto a estos dos paquetes.

Después de mirar un poco en Google, parece que Oracle decidió actualizar el paquete NIO con el paquete NIO.2 más nuevo y mejorado como parte de la versión JDK7.

  1. ¿Cómo se compara el rendimiento del paquete NIO con el paquete NIO.2 ?
  2. ¿Cuáles son algunos cambios grandes de NIO a NIO.2 ? (por ejemplo, nuevos métodos, características)
  3. ¿Por qué el paquete NIO original tuvo que ser actualizado?
  4. ¿Es NIO.2 sólo el paquete NIO hoy en día?

No es que quiera usar el paquete heredado en mi código, simplemente siento curiosidad por esto. Por favor, dime sus diferencias?


Java comenzó inicialmente ofreciendo la clase File , en el paquete java.io para acceder a los sistemas de archivos. Este objeto representa un archivo / directorio y le permitió realizar algunas operaciones, como verificar si un archivo / directorio existe, obtener propiedades y eliminarlo. Tenía, sin embargo, algunas deficiencias. Para nombrar unos pocos:

  • La clase de archivo carecía de alguna funcionalidad importante, como un método de copia.
  • También definió muchos métodos que devolvían boolean . Como se puede imaginar, en caso de error, se devolvió false , en lugar de lanzar una excepción. El desarrollador no tenía, de hecho, ninguna forma de saber por qué falló.
  • No proporcionó un buen manejo en el apoyo de enlaces simbólicos.
  • Se proporcionó un conjunto limitado de atributos de archivo.

Para superar estos problemas, el paquete java.nio se introdujo en Java 4. Las características clave fueron:

  • Canales y selectores: Un canal es una abstracción de las funciones del sistema de archivos de nivel inferior, por ejemplo, archivos asignados en memoria.
  • Buffers: Buffering para todas las clases primitivas (excepto para Boolean).
  • Conjunto de caracteres: Conjunto de caracteres (java.nio.charset), codificadores y decodificadores para asignar bytes y símbolos Unicode

Con java 7 se presenta el paquete java.nio.file que brinda un mejor soporte para el manejo de enlaces simbólicos, acceso a atributos de archivos y, especialmente, para soportar el sistema de archivos a través de clases como Ruta, Ruta y Archivos. Es posible que desee echar un vistazo a la descripción del paquete java.nio.file para obtener más detalles sobre esto.

Teniendo esto en cuenta:

¿Cuáles son algunos cambios grandes de NIO a NIO.2? (por ejemplo, nuevos métodos, características)?

Sirven diferentes propósitos. Para señalar grandes cambios, es posible que desee ver el nuevo paquete java.nio.file .

¿Por qué el paquete NIO original tuvo que ser actualizado?

No lo hizo Un nuevo paquete fue introducido en lugar de actualizado.

¿Es NIO.2 sólo el paquete NIO hoy en día? ¿Cómo se compara el rendimiento del paquete NIO con el paquete NIO.2?

No, no son sinónimos. Tampoco tiene mucho sentido comparar el rendimiento entre ellos, ya que tienen diferentes propósitos. NIO es una E / S de datos de bajo nivel más abstracta y NIO2 enfocada en la administración de archivos.

Espero que esto ayude.

[Bibliografía: Oracle Certified Professional Java SE7 - Una guía de certificación OCJP7 completa, por SGGanesh y Tushar Sharma - Capítulo 9]


NIO.2 introdujo i / o asíncrono .

La E / S asíncrona es un enfoque de la I / O sin bloqueo que no es compatible con NIO.

NIO: selectores / patrón de reactor

NIO.2: controladores de finalización / patrón de proactor

Por lo tanto, cuando está en Windows, NIO.2 utiliza puertos de finalización de E / S , que deberían aumentar el rendimiento. Excepto, nadie lo sabe, porque nadie usa Windows en el lado del servidor, y si lo hacen, probablemente lo hagan porque tienen una gran inversión en .net, y por esa razón lo más probable es que no consideren el uso de Java.