¿Cuál es la diferencia entre las E / S basadas en canales y las E / S basadas en secuencias en Java?

21

¿Cuál es la diferencia entre entrada basada en flujo y entrada basada en canal? La API de Java proporciona tanto el flujo basado en el paquete "java.io" como el canal basado en el paquete "java.nio". ¿Cuál de los dos tiene mejor rendimiento y menos errores de tiempo de ejecución?

Pranit Bauva
fuente
¿comprobaste el wiki de la etiqueta 'nio' en Stack Overflow? "NIO significa 'Nueva E / S'. Se introdujo en JDK 1.4 en el paquete java.nio. Comprende varios elementos: ..."
mosquito
1
esta es una buena pregunta, hace 10 años ... la respuesta corta es que depende , hay mucha documentación extensa sobre cuándo usar qué tecnología, ambos todavía existen porque son mejores en diferentes cosas. Respuesta larga Google tiene todo lo que necesitas saber.
Creo que esto sirve como una buena pregunta de entrada. El OP es uno de los 10,000 afortunados de hoy .
Gary Rowe
De acuerdo con stackoverflow.com/questions/2810156/concepts-channel-vs-stream - el canal está orientado a mensajes mientras que el flujo está orientado a bytes, y probablemente no sepa cómo dividir los mensajes. Otra diferencia es que los canales almacenan mensajes mientras que las transmisiones no.
inf3rno

Respuestas:

13

Consulte esta publicación de blog de Oracle para obtener una buena descripción general

¡Tampoco se olvide de leer sobre las API NIO.2 de Java 7!

En términos de rendimiento, etc., la respuesta es "depende". Depende de las características de su E / S, por ejemplo, su tamaño, su 'forma', ya sea de red o disco o en memoria o ...

Martijn Verburg
fuente
8
Aquí el enlace al archivo: web.archive.org/web/20140528182031/https://blogs.oracle.com/slc/… - Es por eso que las respuestas aquí deberían poder funcionar sin sus enlaces por cierto
piegames