Java NIO - Canais
Descrição
Como o nome sugere, o canal é usado como meio de fluxo de dados de uma extremidade a outra. Aqui no canal java NIO agem da mesma forma entre o buffer e uma entidade na outra extremidade, em outras palavras, o canal é usado para ler dados no buffer e também gravar dados do buffer.
Ao contrário de streams que são usados em canais Java IO convencionais são bidirecionais, ou seja, podem ler e gravar. O canal Java NIO suporta fluxo assíncrono de dados em modo de bloqueio e não de bloqueio.
Implementações de Canal
O canal Java NIO é implementado principalmente nas seguintes classes -
FileChannel- Para ler os dados do arquivo, usamos canal de arquivo. O objeto do canal de arquivo pode ser criado apenas chamando o método getChannel () no objeto de arquivo, pois não podemos criar o objeto de arquivo diretamente.
DatagramChannel - O canal de datagrama pode ler e gravar os dados na rede via UDP (User Datagram Protocol). O objeto de DataGramchannel pode ser criado usando métodos de fábrica.
SocketChannel- O canal SocketChannel pode ler e escrever os dados na rede via TCP (Transmission Control Protocol). Ele também usa os métodos de fábrica para criar o novo objeto.
ServerSocketChannel- O ServerSocketChannel lê e grava os dados em conexões TCP, da mesma forma que um servidor web. Para cada conexão de entrada, um SocketChannel é criado.
Exemplo
O exemplo a seguir lê de um arquivo de texto de C:/Test/temp.txt e imprime o conteúdo no console.
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();
}
}
Resultado
Hello World!