Java NIO는 다음 주요 컴포넌트들로 구성되어 있다:
- Channels
- Buffers
- Selectors
Java NIO는 이것들 보다 더 많은 클래스와 컴포넌트들을 갖고 있으나, 필자는 Channel, Buffer, Selector가 주요 API를 형성한다고 생각한다. Pipe
와 FileLock
과 같은 나머지 컴포넌트들은 세 주요 컴포넌트들의 접속 역할에 사용되는 유틸리티 클래스에 불과하다. 그러므로, 필자는 NIO 개요에서 세개의 주요 컴포넌트들에 초점을 맞출 것이다. 다른 컴포넌트들은 이 튜토리얼의 다른 곳에 컴포넌트 이름으로 설명 되어있다. 이 페이지의 상단 메뉴를 참조하도록 한다.
Channels and Buffers
일반적으로 NIO의 모든 IO는 Channel로 시작한다. Channel은 스트림과 약간 비슷하다. Channel
데이터로부터 Buffer에 읽어질 수 있다. 데이터는 Channel에 Buffer
로부터 기록 될 수도 있다. 다음 그림에서 보는 것과 같다:
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: 한 스레드가 셀렉터를 사용하여 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 |