Java NIO-채널

기술

이름에서 알 수 있듯이 채널은 한쪽에서 다른 쪽 끝으로의 데이터 흐름의 수단으로 사용됩니다. 여기서 Java NIO 채널은 버퍼와 다른 쪽 끝의 엔티티 사이에서 동일하게 작동합니다. 즉 채널은 버퍼로 데이터를 읽고 버퍼에서 데이터를 쓰는 데 사용됩니다.

기존의 Java IO 채널에서 사용되는 스트림과 달리 읽기 및 쓰기가 가능한 양방향입니다. Java NIO 채널은 차단 및 비 차단 모드 모두에서 데이터의 비동기 흐름을 지원합니다.

채널 구현

Java NIO 채널은 주로 다음 클래스에서 구현됩니다.

  • FileChannel− 파일에서 데이터를 읽기 위해 파일 채널을 사용합니다. 파일 채널의 객체는 파일 객체를 직접 생성 할 수 없기 때문에 파일 객체에서 getChannel () 메소드를 호출해야만 생성 할 수 있습니다.

  • DatagramChannel − 데이터 그램 채널은 UDP (User Datagram Protocol)를 통해 네트워크를 통해 데이터를 읽고 쓸 수 있으며, DataGramchannel의 Object는 Factory 방식으로 생성 할 수 있습니다.

  • SocketChannel− SocketChannel 채널은 TCP (Transmission Control Protocol)를 통해 네트워크를 통해 데이터를 읽고 쓸 수 있습니다. 또한 새 개체를 만들기 위해 팩토리 메서드를 사용합니다.

  • ServerSocketChannel− ServerSocketChannel은 웹 서버와 마찬가지로 TCP 연결을 통해 데이터를 읽고 씁니다. 들어오는 모든 연결에 대해 SocketChannel이 생성됩니다.

다음 예제는 텍스트 파일에서 읽습니다. C:/Test/temp.txt 콘텐츠를 콘솔에 인쇄합니다.

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();
   }
}

산출

Hello World!