Ich verstehe nicht ganz, wie unterschiedlich sie voneinander sind, daher habe ich einige Anfragen zu diesen beiden Paketen.
Nachdem Oracle sich ein wenig bei Google umgesehen hat , scheint es, als hätte Oracle beschlossen, das Paket als Teil der JDK7-Version NIO
mit dem neueren und erweiterten NIO.2
Paket zu aktualisieren .
- Wie ist die Leistung des
NIO
Pakets im Vergleich zumNIO.2
Paket? - Was sind einige große Änderungen von
NIO
bisNIO.2
? (zB neue Methoden, Funktionen) - Warum musste das Originalpaket
NIO
aktualisiert werden? - Ist heutzutage
NIO.2
nur ein Synonym für dasNIO
Paket?
Es ist nicht so, dass ich das Legacy-Paket in meinem Code verwenden möchte, ich bin nur sehr neugierig darauf. Bitte erzähl mir ihre Unterschiede?
java
io
nio
difference
John Huynh
quelle
quelle
Antworten:
Java begann zunächst damit, die
File
Klasse imjava.io
Paket für den Zugriff auf Dateisysteme anzubieten . Dieses Objekt stellt eine Datei / ein Verzeichnis dar und hat es Ihnen ermöglicht, einige Vorgänge auszuführen, z. B. zu überprüfen, ob eine Datei / ein Verzeichnis vorhanden ist, Eigenschaften abzurufen und diese zu löschen. Es hatte jedoch einige Mängel. Um ein paar zu nennen:boolean
. Wie man sich vorstellen kann, wurde im Fehlerfallfalse
zurückgegeben, anstatt eine Ausnahme auszulösen. Der Entwickler hatte in der Tat keine Möglichkeit zu wissen, warum es fehlschlug.Um diese Probleme zu lösen, wurde das Paket java.nio in Java 4 eingeführt. Die wichtigsten Funktionen waren:
Mit Java 7 wird das Paket java.nio.file eingeführt, das eine bessere Unterstützung für den Umgang mit symbolischen Links, den Zugriff auf Dateiattribute und insbesondere für die Unterstützung der Erweiterung des Dateisystems durch Klassen wie Pfad, Pfade und Dateien bietet. Vielleicht möchten Sie einen Blick auf die Paketbeschreibung java.nio.file werfen , um weitere Details dazu zu erhalten.
Mit dieser Einstellung:
Sie dienen verschiedenen Zwecken. Um auf große Änderungen hinzuweisen, sollten Sie sich das brandneue Paket ansehen
java.nio.file
.Es war nicht so. Ein neues Paket wurde eingeführt und nicht aktualisiert.
Nein, sie sind auch nicht. Es ist auch wenig sinnvoll, die Leistung zwischen ihnen zu vergleichen, da sie unterschiedlichen Zwecken dienen. NIO ist eine abstraktere Low-Level-Daten-E / A und NIO2, die sich auf die Dateiverwaltung konzentriert.
Hoffe das hilft.
[Bibliographie: Oracle Certified Professional Java SE7 - Ein umfassender OCJP7-Zertifizierungsleitfaden von SGGanesh und Tushar Sharma - Kapitel 9]
quelle
NIO.2 führte asynchrone E / A ein .
Asynchrone E / A ist ein Ansatz für nicht blockierende E / A, der von NIO nicht unterstützt wird.
NIO: Selektoren / Reaktormuster
NIO.2: Vervollständigungshandler / Proaktormuster
Unter Windows verwendet NIO.2 daher E / A-Abschlussports , die die Leistung steigern sollten. Außer, niemand weiß es, weil niemand Windows auf der Serverseite verwendet, und wenn ja, tun sie dies wahrscheinlich, weil sie stark in .net investiert sind und aus diesem Grund höchstwahrscheinlich nicht in Betracht ziehen, Java zu verwenden.
quelle
Meine Einstellung:
Kurzfassung
Es ist das Hinzufügen des Pakets java.nio.file mit seiner stark erweiterten Datei- und Dateisystemfunktionalität auf hohem Niveau.
Aus der Sicht von Netzwerk-Sockets oder einfachem Dateizugriff ist NIO == NIO.2 mit einigen praktischen Verbesserungen.
Längere Version
Java IO
Paket:
java.io
Alte blockierende E / A-API
Java NIO
In Java 1.4 wurde die neue nicht blockierende API hinzugefügt.
Paket:
java.nio
Java nicht blockierende E / A. Klassen wie
Selector
,SelectorKey
,Channel
.Es scheint mir , die NIO einen großen Schritt für das Netzwerk war I / O (
Selector
,SelectorKey
,SocketChannel
,ServerSocketChannel
,Buffer
), viel weniger für Datei - I / O (FileChannel
undBuffer
nur, einschließlich Memory - Dateien abgebildet). Dies ist eine API auf relativ niedriger Ebene, sowohl für Netzwerk- als auch für Dateiteile.Java NIO.2
In Java 7 hinzugefügt. Es geht hauptsächlich um das Hinzufügen einer stark verbesserten Datei- und Dateisystem-Manipulations- und Adressierungs-API. Die neue Datei- und Dateisystem-bezogene API ist relativ hoch.
Paket:
java.nio.file
und einige Ergänzungen zum Elternteiljava.nio
.Diese Ergänzungen gelten für Datei-E / A und nur wenige geringfügige Ergänzungen für Netzwerk-E / A oder Datei-API auf niedriger Ebene.
Am bemerkenswertesten Low-Level, nicht notwendig Datei verwendet, API Ergänzungen sind
AsynchronousSocketChannel
,AsynchronousServerSocketChannel
undAsynchronousFileChannel
, die Rückrufe fügen Varianten auf einige Methoden. Die asynchronen Versionen von sind hauptsächlich eine praktische Ergänzung. Solche Mapping-Schnittstellen hätten schon früher zusammen gehackt werden können, aber jetzt sind sie in der JRE sofort verfügbar.Die neue Datei-API bringt viele Extras mit sich - viel nützlichere Adressierung des Dateisystems mit Path, viel verbesserte Manipulation von ZIP-Dateien mithilfe eines benutzerdefinierten Dateisystemanbieters, Zugriff auf spezielle Dateiattribute, viele praktische Methoden wie das Lesen der gesamten Datei mit einem Befehl und das Kopieren von Dateien mit Ein Befehl usw. Aber es hängt alles mit Datei / Dateisystem zusammen und alles auf ziemlich hohem Niveau.
Ich wiederhole, was ich oben bereits gesagt habe, aus der Perspektive von Netzwerksockets oder Dateizugriff auf niedriger Ebene, NIO == NIO.2
Relevante Links
quelle