Java-Programmierung, I/O wurde bis vor kurzem mit einer Stream-Metapher durchgeführt. Alle Ein-/Ausgaben werden als die Bewegung einzelner Bytes nacheinander durch ein Objekt, das als Stream bezeichnet wird, betrachtet. Stream I/O wird zur Kontaktierung der Außenwelt verwendet. Es wird auch intern verwendet, um Objekte in Bytes und dann zurück in Objekte umzuwandeln.
NIO hat die gleiche Rolle und den gleichen Zweck wie die ursprüngliche E/A, aber es verwendet eine andere Metapher - Block I/O. java.nio (neue/nicht blockierende I/O)) API wurde mit JDK1.4 eingeführt.
Was ist der Unterschied zwischen Stream I/O und Block I/O?
Ein stream-orientiertes E/A-System behandelt Daten jeweils byteweise. Ein Eingabestrom erzeugt ein Datenbyte, und ein Ausgabestrom verbraucht ein Datenbyte. Es ist sehr einfach, Filter für gestreamte Daten zu erstellen. Es ist auch relativ einfach, mehrere Filter miteinander zu verketten, so dass jeder seinen Teil in einem einzigen, hochentwickelten Verarbeitungsmechanismus spielt. Auf der anderen Seite sind stream-orientierte I/O oft ziemlich langsam.
Ein blockorientiertes E/A-System behandelt Daten in Blöcken. Jede Operation erzeugt oder verbraucht einen Datenblock in einem Schritt. Die Verarbeitung von Daten durch den Block kann viel schneller sein als die Verarbeitung durch das (gestreamte) Byte. Block-orientierten I/O fehlt jedoch etwas von der Eleganz und Einfachheit von Stream-orientierten I/O.
Wann sollten Sie java.io verwenden und wann sollten Sie java.nio bevorzugen?
Skalierbarkeit wird wahrscheinlich Ihre Wahl des Pakets fahren. java.net benötigt einen Thread pro Socket. Die Codierung wird wesentlich einfacher. java.nio ist viel effizienter, aber schwer zu programmieren.
Sie können eine bessere Skalierbarkeit erzielen, wenn Sie mit Zehntausenden von Verbindungen arbeiten, aber bei niedrigeren Zahlen erhalten Sie wahrscheinlich einen besseren Durchsatz, wenn Sie IO blockieren.
Bei der Arbeit mit SSL Java.nio ist nicht etwas, was einfach mit
Wichtig umgehen: Wenn Sie mit einem der Pakete arbeiten, ist es keine gute Idee, den Rahmen von Grund auf bis zu erstellen und es sei denn, Sie haben einen zwingenden Grund zu tun damit.
Für java.nio stellen Projekte wie Grizzly und Quick Server wiederverwendbare, nicht blockierende Serverkomponenten bereit.
Worth lesen Pain points with java.nio
Schließlich läuft es auf spezifischen Anforderungen Ihrer Projekte nach unten und was Sie versuchen zu erreichen. Einige der besten Lösungen erfordern möglicherweise nicht die komplexeste Infrastruktur unter
Update: Kürzlich über NIO.2 Paket, das seit jdk 1.7 existiert. NIO.2 unterscheidet sich von NIO, wobei NIO.2 asynchrone Kanalfunktionen bietet. NIO.2 primer
Wenn Sie mit NIO arbeiten, lohnt es sich, durch den Unterschied zu gehen und welches Ihrem Zweck entspricht.
Kein * answasser *, also poste ich einen Kommentar: [Die Wikipedia - Seite darauf] (http://en.wikipedia.org/wiki/New_I/O) diskutiert einige der Ziele und Gründe für die Nio-Paket. –
"Ped" ist pedantisch und Teil der NIO2-Bibliothek, die in Java 7 hinzugefügt wurde. BTW: Obwohl es viele nicht-blockierende NIO-Sockets gibt, verwende ich normalerweise blockierende NIO-Sockets, die IMHO einfacher zu verwenden sind. NIO2 Fügen Sie asynchrones NIO für Sockets und Dateien hinzu. –