새로운 I/O API를 사용하는 클라이언트를 구현하기 위해 SocketChannel.open()을 호출하여 채널을 얻는다.

여기에 configureBlcoking(false)를 사용하여 해당 채널을 넌블러킹 모드로 사용하겠다고 설정한다.

Selector

셀렉터를 사용하여 처리할 준비가 완료된 채널만을 찾아서 작업을 할 수 있다.

채널을 셀렉터에 등록하여 셀렉터가 채널을 감시한다. I/O 작업할 준비가 완료된 채널이 생기면 셀렉터를 통해 해당 채널을 획득하여 I/O 작업을 처리 할 수 있다.

Buffer

새로운 I/O 모델에서는 모든 I/O가 버퍼링 된다. 버퍼는 NIO의 기초를 이루고 있다. 버퍼는 데이터를 나열하는 것 외에 네가지 중요한 정보를 관리한다.

clear()을 호출하면 위치를 0으로 세팅하여 한도를 용량으로 설정하여 버퍼를 비운다. 그러나 clear 메서드를 호출하더라도 이전 데이터는 버퍼에 여전히 남아있다. get 메서드를 사용하거나 위치와 한도를 변경하여 다시 읽을 수 있다.

rewind()을 호출하면 위치를 0으로 바꾸지만 한도를 변경하지는 않는다.

flip()을 호출하면 한도를 현재 위치로 설정하고 위치를 0으로 설정한다. 이 메서드는 버퍼를 채운 다음 버퍼의 내용을 내보내야 할 때 사용된다.

remaining(), hasRemaining() 메서드는 버퍼에서 현재 위치와 한도 사이에 남아 있는 요소의 수를 반환하거나 남아있는 요소 수가 있는지 반환한다.

버퍼 생성