Overview

Programming/Java NIO 2015. 9. 7. 17:14

Java NIO는 다음 주요 컴포넌트들로 구성되어 있다:

  • Channels
  • Buffers
  • Selectors

Java NIO는 이것들 보다 더 많은 클래스와 컴포넌트들을 갖고 있으나, 필자는 ChannelBuffer, Selector가 주요 API를 형성한다고 생각한다. Pipe와 FileLock과  같은 나머지 컴포넌트들은 세 주요 컴포넌트들의 접속 역할에 사용되는 유틸리티 클래스에 불과하다. 그러므로, 필자는 NIO 개요에서 세개의 주요 컴포넌트들에 초점을 맞출 것이다. 다른 컴포넌트들은 이 튜토리얼의 다른 곳에 컴포넌트 이름으로 설명 되어있다. 이 페이지의 상단 메뉴를 참조하도록 한다.

Channels and Buffers


일반적으로 NIO의 모든 IO는 Channel로 시작한다. Channel은 스트림과 약간 비슷하다. Channel 데이터로부터 Buffer에 읽어질 수 있다. 데이터는 Channel에 Buffer로부터 기록 될 수도 있다. 다음 그림에서 보는 것과 같다:

Java NIO: Channels and Buffers
Java NIO: 채널은 버퍼의 데이터를 읽고, 버퍼는 채널에 데이터를 쓴다


Channel과 Buffer는 다양한 종류가 있다. 다음 Java NIO의 주요 구현 Channel 목록들이다:

  • FileChannel
  • DatagramChannel
  • SocketChannel
  • ServerSocketChannel

볼 수 있듯이, 이 채널들은 UDP + TCP 네트워크 IO와 파일 IO로 덮여있다. 


이 클래스들 역시 몇가지 관심이 가는 동반하는 인터페이스들이 있으나, 단순함을 위해 Java NIO 개요에선 제외할 것이다. 그것들은 Java NIO 튜토리얼의 다른 텍스트의 적절한 곳에서 설명 될 것이다.


Java NIO의 주요 구현 Buffer 목록들이다:

  • ByteBuffer
  • CharBuffer
  • DoubleBuffer
  • FloatBuffer
  • IntBuffer
  • LongBuffer
  • ShortBuffer

이 버퍼들은 IO를 통해 보낼 수 있는 기본 데이터형들로 덮여있다: byte, short, int, long, float, double, characters.


Java NIO는 매핑된 파일들의 메모리와 함께 사용되는 MappedByteBuffer도 갖고있다. 그렇지만 필자는 개요에서 이 Buffer를 제외할 것이다.

Selectors


Selector는 한 스레드가 다중 Channel의 관리를 허용한다. 만약 애플리케이션이 많은 연결들(채널들)을 열었을 때, 각 연결들이 낮은 트래픽을 갖는다는 점에서 편리하다. 채팅 서버와 같은 예를 들 수 있다.


다음 한 스레드에서 Selector를 사용하여 3개 Channel의 관리에 관한 그림이다: 

Java NIO: Selectors

Java NIO: 한 스레드가 셀렉터를 사용하여 3개 채널 관리


Selector 사용을 위해 그것으로 Channel을 등록한다. 그 후에 select() 메소드를 호출한다. 이 메소드는 등록 된 채널중 하나의 이벤트가 준비 될 때까지 블럭 될 것이다. 메소드가 한번 반환하면, 해당 스레드는 이러한 이벤트들을 처리할 수 있다. 이벤트들의 예로는 연결 수신, 데이터 수신 등이 있다.



<원문 출처>


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

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