Java NIO - Kanäle
Beschreibung
Wie der Name schon sagt, wird der Kanal als Mittelwert des Datenflusses von einem Ende zum anderen verwendet. Hier in Java verhält sich der NIO-Kanal zwischen dem Puffer und einer Entität am anderen Ende gleich, mit anderen Worten, der Kanal wird zum Lesen von Daten zum Puffern und auch zum Schreiben von Daten aus dem Puffer verwendet.
Im Gegensatz zu Streams, die in herkömmlichen Java-E / A-Kanälen verwendet werden, gibt es zwei Möglichkeiten, dh Lesen und Schreiben. Der Java-NIO-Kanal unterstützt den asynchronen Datenfluss sowohl im blockierenden als auch im nicht blockierenden Modus.
Implementierungen von Channel
Der Java NIO-Kanal wird hauptsächlich in folgenden Klassen implementiert:
FileChannel- Um Daten aus einer Datei zu lesen, verwenden wir den Dateikanal. Das Objekt des Dateikanals kann nur durch Aufrufen der Methode getChannel () für das Dateiobjekt erstellt werden, da das Dateiobjekt nicht direkt erstellt werden kann.
DatagramChannel - Der Datagrammkanal kann die Daten über UDP (User Datagram Protocol) über das Netzwerk lesen und schreiben. Das Objekt von DataGramchannel kann mit Factory-Methoden erstellt werden.
SocketChannel- Der SocketChannel-Kanal kann die Daten über TCP (Transmission Control Protocol) über das Netzwerk lesen und schreiben. Es werden auch die Factory-Methoden zum Erstellen des neuen Objekts verwendet.
ServerSocketChannel- Der ServerSocketChannel liest und schreibt die Daten über TCP-Verbindungen, genau wie ein Webserver. Für jede eingehende Verbindung wird ein SocketChannel erstellt.
Beispiel
Das folgende Beispiel liest aus einer Textdatei aus C:/Test/temp.txt und druckt den Inhalt auf die Konsole.
temp.txt
Hello World!
ChannelDemo.java
import java.io.IOException;
import java.io.RandomAccessFile;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
public class ChannelDemo {
public static void main(String args[]) throws IOException {
RandomAccessFile file = new RandomAccessFile("C:/Test/temp.txt", "r");
FileChannel fileChannel = file.getChannel();
ByteBuffer byteBuffer = ByteBuffer.allocate(512);
while (fileChannel.read(byteBuffer) > 0) {
// flip the buffer to prepare for get operation
byteBuffer.flip();
while (byteBuffer.hasRemaining()) {
System.out.print((char) byteBuffer.get());
}
}
file.close();
}
}
Ausgabe
Hello World!