Was ist der Unterschied zwischen kanalbasierter E / A und streambasierter E / A in Java?


21

Was ist der Unterschied zwischen Stream-basiertem Input und Channel-basiertem Input? Die Java-API bietet sowohl Stream-basiert im Paket "java.io" als auch Channel-basiert im Paket "java.nio". Welcher der beiden ist leistungsstärker und reduziert Laufzeitfehler?


Hast du das 'nio' Tag Wiki bei Stack Overflow überprüft ? "NIO steht für 'New I / O'. Es wurde in JDK 1.4 im Paket java.nio eingeführt. Es enthält mehrere Elemente: ..."
gnat

1
das ist eine gute frage, vor 10 jahren ... die kurze antwort ist, es kommt darauf an , es gibt viele ausführliche dokumentationen darüber, wann man welche technik einsetzt, beide gibt es noch, weil sie in verschiedenen dingen besser sind. Lange Antwort Google hat alles, was Sie wissen müssen.

Ich denke, dass dies eine gute Gateway-Frage ist. Das OP ist eines der heutigen glücklichen 10.000 .
Gary Rowe

Laut stackoverflow.com/questions/2810156/concepts-channel-vs-stream ist der Kanal nachrichtenorientiert, während der Stream byteorientiert ist, und weiß wahrscheinlich nicht, wie die Nachrichten aufgeteilt werden sollen. Ein weiterer Unterschied ist, dass Kanäle Nachrichten speichern, während Streams dies nicht tun.
Inf3rno

Antworten:


13

Einen guten Überblick finden Sie in diesem Oracle-Blogbeitrag

Vergessen Sie auch nicht, sich über die NIO.2-APIs von Java 7 zu informieren!

In Bezug auf die Leistung usw. lautet die Antwort "es kommt darauf an". Es hängt von den Eigenschaften Ihrer E / A ab, z. B. von der Größe, der Form, ob es sich um ein Netzwerk oder eine CD handelt, oder ob sie sich im Speicher befindet oder ...


8
Hier der Link zum Archiv: web.archive.org/web/20140528182031/https://blogs.oracle.com/slc/… - Deshalb sollten Antworten hier auch ohne deren Links funktionieren können, btw
piegames
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.