Java NIO ist gruppiert nach den folgenden Kernteilen:
Kanäle
Puffer
Selektoren
Obwohl es in Java NIO viele andere Klassen und Komponenten gibt, bilden meiner Meinung nach Kanal, Puffer und Selektor den Kern der API. Andere Komponenten wie Pipe und FileLock sind lediglich Dienstprogrammklassen, die mit den drei Kernkomponenten verwendet werden. Daher werde ich mich in dieser Übersicht auf diese drei Komponenten konzentrieren. Andere Komponenten werden in separaten Kapiteln behandelt.
Grundsätzlich beginnen alle IOs von einem Kanal in NIO. Kanäle sind ein bisschen wie Streams. Daten können vom Kanal in den Puffer gelesen oder vom Puffer in den Kanal geschrieben werden. Hier ist eine Illustration:
Es gibt verschiedene Arten von Kanälen und Puffern. Im Folgenden sind die Implementierungen einiger wichtiger Kanäle in JAVA NIO aufgeführt:
FileChannel
DatagramChannel
SocketChannel
ServerSocketChannel
Wie Sie sehen können, decken diese Kanäle UDP- und TCP-Netzwerk-IO sowie Datei-IO ab.
Zusammen mit diesen Klassen gibt es einige interessante Schnittstellen, aber der Einfachheit halber habe ich versucht, sie in der Übersicht nicht zu erwähnen. Ich werde sie in anderen Kapiteln dieses Tutorials erläutern, sofern sie relevant sind.
Im Folgenden sind die wichtigsten Pufferimplementierungen in Java NIO aufgeführt:
ByteBuffer
CharBuffer
DoubleBuffer
FloatBuffer
IntBuffer
LongBuffer
ShortBuffer
Diese Puffer decken die grundlegenden Datentypen ab, die Sie über IO senden können: Byte, kurz , int, long, float, double und char.
Java NIO hat auch einen MappedByteBuffer, der zur Darstellung von speicherzugeordneten Dateien verwendet wird. Ich werde ihn in der Übersicht nicht erklären.
Selektor ermöglicht einem einzelnen Thread die Verarbeitung mehrerer Kanäle. Wenn Ihre Anwendung mehrere Verbindungen (Kanäle) öffnet, der Datenverkehr jeder Verbindung jedoch sehr gering ist, kann die Verwendung von Selector praktisch sein. Zum Beispiel in einem Chatserver.
Dies ist eine Darstellung der Verwendung eines Selektors zur Verarbeitung von 3 Kanälen in einem einzelnen Thread:
Um den Selektor zu verwenden, müssen Sie den Kanal beim registrieren Selector und rufen Sie dann seine Methode select() auf. Diese Methode blockiert, bis ein registrierter Kanal das Ereignis bereit hat. Sobald diese Methode zurückkehrt, kann der Thread diese Ereignisse verarbeiten. Beispiele für Ereignisse sind neu eingehende Verbindungen, Datenempfang usw.
Das obige ist der detaillierte Inhalt vonJava NIO (1) Java NIO-Übersicht. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!