Channel

Programming/Java NIO 2015. 9. 8. 10:16

Java NIO 채널들은 몇가지 다른점을 갖고 있는 스트림들과 비슷하다:

  • 채널들에 읽기 쓰기를 모두 할 수 있다. 스트림들은 일반적으로 단방향이다(읽기나 기록하기).
  • 채널은 비동기적으로 읽고 기록된다.
  • 항상 채널은 버퍼를 읽고, 버퍼로부터 기록한다.

위에서 언급했듯이, 채널로부터 버퍼 데이터를 읽고, 버퍼로부터 채널에 데이터를 기록한다. 다음 그림과 같다:

Java NIO: Channels and Buffers

Java NIO: 채널들은 버퍼들의 데이터를 읽고, 버퍼들은 채널들에 데이터를 기록한다

Channel Implementations


다음 Java NIO의 가장 중요한 구현 채널들이다:

  • FileChannel
  • DatagramChannel
  • SocketChannel
  • ServerSocketChannel

FileChannel은 파일에 혹은 파일로부터 데이터를 읽는다.


DatagramChannel은 UDP를 통해 네트워크 데이터를 읽고 기록할 수 있다.


SocketChannel은 TCP를 통해 네트워크 데이터를 읽고 기록할 수 있다.


ServerSocketChannel은 웹 서버가 그러하듯이 TCP 연결이 수신되는 것을 알 수 있도록 허용한다. 각 연결이 수신되면 한 SocketChannel이 생성된다.

Basic Channel Example


다음 Buffer의 일부 데이터를 읽기 위한 FileChannel을 사용하는 기본 예제이다:

    RandomAccessFile aFile = new RandomAccessFile("data/nio-data.txt", "rw");
    FileChannel inChannel = aFile.getChannel();

    ByteBuffer buf = ByteBuffer.allocate(48);

    int bytesRead = inChannel.read(buf);
    while (bytesRead != -1) {

      System.out.println("Read " + bytesRead);
      buf.flip();

      while(buf.hasRemaining()){
          System.out.print((char) buf.get());
      }

      buf.clear();
      bytesRead = inChannel.read(buf);
    }
    aFile.close();

buf.flip() 호출을 주목하기 바란다. 맨 처음 버퍼 데이터를 읽는다. 그 뒤에 그것을 flip한다. 그 뒤에 그것을 바깥으로 읽는다. 필자는 Buffer에 관하여 다음 텍스트에서 더 많은 정보를 가져 올 것이다.



<원문 출처>

'Programming > Java NIO' 카테고리의 다른 글

Channel to Channel Transfers  (0) 2015.09.09
Scatter / Gather  (0) 2015.09.08
Buffer  (0) 2015.09.08
Overview  (0) 2015.09.07
Tutorial  (0) 2015.09.07
Posted by 레미파
,