Heim  >  Artikel  >  Java  >  Eine detaillierte Einführung in den Vergleich zwischen Javas NIO und IO

Eine detaillierte Einführung in den Vergleich zwischen Javas NIO und IO

黄舟
黄舟Original
2017-03-17 10:05:321246Durchsuche

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:

  1. IO basiert auf Stream (Stream-orientiert), während NIO auf Buffer (Puffer-orientiert)

  2. IO-Operationen basiert sind blockierend und NIO-Operationen sind nicht blockierend

  3. 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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn