비동기 입출력을 지원함 싱글 스레드 환경에서 멀티 스레드 환경처럼! 성능이 오히려 우수한 경우도 존재. Java NIO
- 자바 1.4 도입
- 비동기 입출력 API
- 멀티스레딩 환경에서 효율적인 입출력 처리 지원
- 구성요소 및 기능
- Buffer
- 데이터를 읽고 쓰기 위한 메모리 블록으로 채널에 종속되어 활용
- Channel
- 입출력 위한 인터페이스로 기존 스트림과 달리 양방향(읽기와 쓰기) 입출력 처리 가능
- Selector
- 여러 채널의 읽기, 쓰기, 준비 이벤트 감지
- Buffer
IO vs NIO
| IO | NIO |
|---|---|
| 스트림 기반 동기 모드 입출력 | 입출력 버퍼 활용한 비동기 모드 소켓 입출력 |
| 읽기와 쓰기 스트림을 분리해 개별처리(단방향 입출력) | 한 채널에 대해 읽기, 쓰기 모두 가능(양방향 입출력) |
| 논리구조가 간단하지만 상대적으로 효율이 떨어짐 | 한 스레드에서 여러 채널을 동시에 처리 용이(네트워크 서버 개발) |
| 본질적으로 파일입출력과 네트워크입출력은 다르지 않다…! |