반응형
이것이 자바다 - NIO 기반 입출력 및 네트워킹
NIO
- 자바4에서부터 java.nio 패키지에 포함됨
- 자바7에서 비동기 채널 등의 네트워크 지원을 대폭 강화하면서 NIO.2 API를 추가함
- NIO는 채널 기반이다. 스트림과 달리 채널은 양방향으로 입출력이 가능하다.
- NIO는 기본적으로 버퍼를 사용해서 IO보다는 입출력 성능이 좋다.
- IO는 블록킹 된다면 NIO는 블로킹과 논블로킹 둘다 지원. 블로킹은 인터럽트가 지원됨.
- 대용량 데이터를 전송하는 경우는 IO, 연결 클라이언트가 많고 입출력 처리가 작은것은 NIO을 권장
파일과 디렉토리
- Paths.get() : 파일의 경로 반환
- FileSystems.getDefault() : 파일 시스템 정보 반환
- Files : 파일 속성 읽기, 파일 및 디렉토리 생성/삭제 관련 클래스
와치서비스
- 일반적으로 파일 변경 통지 메커니즘으로 알려져 있다
버퍼
- Direct / NonDirect 두가지로 분류됨
- 데이터 타입에 다라 버퍼가 제공됨
- Direct 버퍼는 운영치제의 메모리를 사용하여 버퍼 생성 시간은 늦지만 버퍼의 크기 때문에 입출력이 잦을 때 사용
- NonDirect 버퍼는 JVM 메모리를 사용, 버퍼 생성 시간은 짧지만 할당된 버퍼의 크기가 작고 입출력 성능이 늦다.
- allocate() / wrap() : NonDirect 버퍼 생성
- allocatDirect() : Direct 버퍼 생성, ByteBuffer에만 있다.
ByteOrder
- Big Endian : 앞쪽 바이트부터 먼저 처리하는 것
- Little Endian : 뒤쪽 바이트부터 먼저 처리하는 것
파일 채널
- FileChannel open, close
- FileChannel의 read, write 메소드는 파일 입출력 동안 작업이 블로킹된다.
- 비동기 파일 채널을 지원함 AsynchronousFileChannel
TCP 블로킹 채널
- ServerSoketChannel
- SocketChannel
TCP 넌블로킹 채널
- Selctor
- 1. 작업 유형을 키(SelectionKey)로 생성하고 Selector의 관심키셋에 저장
- 2. 작업 준비가 된 키를 선택된 키셋에 별도로 저장
- 3. 작업스레드가 선택된 키셋에 있는 키를 하나씩 꺼내어 키와 연관된 채널 작업을 처리
TCP 비동기 채널
- AsynchronousServerSocketChannel, AsynchronousSocketChannel
- 비동기 채널 그룹 : 같은 스레드풀을 공유하는 비동기 채널의 묶음
- 비동기 서버소켓 채널 : open, close, accept 완료 처리 handler에 대해 구현
- 비동기 소켓 채널
UDP
- DatagramChannel
반응형
'Develop' 카테고리의 다른 글
개발자가 반드시 정복해야 할 객체 지향과 디자인패턴 2 (0) | 2020.02.22 |
---|---|
개발자가 반드시 정복해야 할 객체 지향과 디자인패턴 1 (0) | 2020.02.22 |
이것이 자바다 - IO 기반 입출력 및 네트워킹 (0) | 2020.02.22 |
Java9 Java10 특징 찾아보기 (0) | 2020.02.22 |
이것이 자바다 - 스트림과 병렬처리 (0) | 2020.02.22 |
댓글