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!