Dieser Artikel stellt hauptsächlich die detaillierte Erklärung und den Vergleich von Javas NIO und IO vor. Freunde, die es brauchen, können sich darauf beziehen
Der Unterschied zwischen Javas NIO und IO
NIO ist asynchrones IO, das in JDK1.4 eingeführt wurde. Der Kernbestandteil von NIO sind drei Punkte:
Kanal
Puffer
Selektor
Vergleich zwischen NIO und IO
Der Unterschied zwischen NIO und IO im Allgemeinen In drei Aspekten:
IO basiert auf Stream (Stream-orientiert), während NIO auf Buffer (Puffer-orientiert)
IO-Operationen basiert sind blockierend und NIO-Operationen sind nicht blockierend
IO hat kein Selektorkonzept, während NIO ein Selektorkonzept hat.
Basierend auf Stream Traditionelles IO basierend auf Puffer
ist auf Byte-Stream oder Zeichen-Stream ausgerichtet, aber in NIO haben wir den traditionellen IO-Stream aufgegeben und die Konzepte von Kanal und Puffer eingeführt. In NIO kann ich nur Daten von einem Kanal in einen Puffer lesen oder Daten von einem Puffer in einen Kanal schreiben.
Was ist also Stream-basiert? Bei allgemeinen Java-IO-Operationen lesen wir nacheinander ein oder mehrere Bytes aus einem Stream, sodass wir die gelesenen Daten nicht nach Belieben ändern können .
Aber basierend auf dem Puffer ist es etwas anders. Wir müssen zuerst die Daten aus dem Kanal in den Puffer einlesen, dann können wir die Daten bearbeiten. Im Gegensatz zu IO, bei dem es sich um eine sequentielle Operation handelt, können wir in NIO Daten an jedem beliebigen Ort nach Belieben lesen.
Blockierend und nicht blockierend
Die verschiedenen von Java bereitgestellten Stream-Operationen sind blockierend. Beispielsweise rufen wir eine Lesemethode auf, um den Inhalt von a zu lesen DateiDann wird der Thread, der read aufruft, blockiert, bis der Lesevorgang abgeschlossen ist. Der nicht blockierende Modus von NIO ermöglicht es uns, E/A-Vorgänge nicht blockierend auszuführen. Zum Beispiel müssen wir im nicht blockierenden Modus von NIO Daten lesen, wenn zu diesem Zeitpunkt Daten vorhanden sind, und wenn zu diesem Zeitpunkt keine Daten vorhanden sind, wird read zurückgegeben direkt und blockiert den aktuellen Thread nicht.
Selektor
Selektor ist ein einzigartiges Konzept für NIO. Es ist der Schlüssel dafür, warum Java NIO IO-Operationen auf nicht blockierende Weise ausführen kann. Durch Selector kann ein Thread die IO-Ereignisse mehrerer Kanäle überwachen. Wenn wir einen Kanal in einem Selector registrieren, kann der interne Mechanismus des Selectors automatisch kontinuierlich abfragen (auswählen), ob diese registrierten Kanäle verfügbar sind Ereignisse (z. B. lesbar, beschreibbar, Netzwerkverbindung abgeschlossen usw.). Durch einen solchen Auswahlmechanismus können wir problemlos einen Thread verwenden, um mehrere Kanäle effizient zu verwalten.
Das obige ist der detaillierte Inhalt vonEine detaillierte Einführung in den Vergleich zwischen Javas NIO und IO. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!