Java NIO - kanały
Opis
Jak sama nazwa wskazuje, kanał jest używany jako środek przepływu danych z jednego końca na drugi. Tutaj w java NIO kanał działa tak samo między buforem a jednostką na drugim końcu, innymi słowy kanał służy do odczytu danych do bufora, a także zapisu danych z bufora.
W przeciwieństwie do strumieni, które są używane w konwencjonalnych Java, kanały IO są dwukierunkowe, tzn. Mogą zarówno czytać, jak i pisać. Kanał Java NIO obsługuje asynchroniczny przepływ danych zarówno w trybie blokowym, jak i nieblokującym.
Wdrożenia Channel
Kanał Java NIO jest realizowany przede wszystkim w następujących klasach -
FileChannel- Do odczytu danych z pliku wykorzystujemy kanał plików. Obiekt kanału pliku można utworzyć tylko przez wywołanie metody getChannel () na obiekcie plik, ponieważ nie możemy bezpośrednio utworzyć obiektu pliku.
DatagramChannel - Kanał datagramowy może odczytywać i zapisywać dane w sieci poprzez UDP (User Datagram Protocol). Obiekt DataGramchannel można utworzyć przy użyciu metod fabrycznych.
SocketChannel- Kanał SocketChannel może odczytywać i zapisywać dane w sieci za pośrednictwem protokołu TCP (Transmission Control Protocol). Używa również metod fabrycznych do tworzenia nowego obiektu.
ServerSocketChannel- ServerSocketChannel odczytuje i zapisuje dane przez połączenia TCP, tak samo jak serwer WWW. Dla każdego połączenia przychodzącego tworzony jest SocketChannel.
Przykład
Poniższy przykład odczytuje z pliku tekstowego z C:/Test/temp.txt i drukuje zawartość na konsoli.
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();
}
}
Wynik
Hello World!