에서 어느 정도 정리했던 내용인데… 면접에서 관련 질문을 받았을때 제대로 답변하지 못하였다.
해당 페이지의 내용과 함께 자바 IO, NIO 에 관한 일반적인 이야기를 정리해보자.
예상 질문 리스트
Q) Java 의 NIO 에 대해서 알고 계신가요?
Q) Java 의 IO 와 NIO 를 비교해주세요
Q) NIO 가 IO 보다 빠르다고 알려져 있는데 그 이유가 무었일까요?
- Direct Buffer 를 통해 커널 버퍼를 직접 사용하기 때문
- 운영체제의 시스템콜을 간접적으로 사용하기 때문 (시스템 콜의 호출 횟수를 줄인다)
- Non-blocking 을 통해 쓰레드의 블로킹 상태를 제거하여 컨텍스트 스위칭이 적게 발생하기 때문
우선 이 정도의 질문에 대답할 수 있도록 정리해보자. 추가로 톰캣의 bio, nio 커넥터를 살펴보자!
이것이 자바다 18장, 19장 정리!
IO - 입출력은 프로그램에서 데이터를 외부에서 읽고, 외부로 데이터를 출력하는 작업이다.
이러한 입출력은 파일, 네트워크 등 다양한 형태로 이루어 질 수 있다.
자바에서 데이터는 Stream 을 통해 입출력된다. `
Stream 에는 입력 스트림과 출력 스트림이 있다.

스트림의 주요한 특징으로는 단방향 이라는 것이 있다.
1. 기존 Java IO 가 느린 이유, NIO 한줄 요약
Java 가 다른 언어보다 느리다는 이야기가 많이 있다.
자바는 C/C++ 과 달리
- 포인터로 직접 메모리를 관리할 수 없다.
- 운영체제 수준의 시스템콜을 직접 사용할 수 없다.
- JVM 이라는 프로세스 위에서 동작하는 비교적 고수준의 언어이다.
- GC 의 메모리 점유 문제도 있다.
자바의 NIO 는 자바의 I/O의 성능 문제를 를 1번과 2번의 관점에서 개선한 것이다.
NIO 는 자바 I/O 의 성능 문제를
- 직접 메모리를 관리 하… 는 것 처럼! 하고 (Direct Buffer)
- 운영체제 수준의 시스템콜을 직접 사용하는… 것 처럼!
해서 ( + non-blocking) 개선하는 것이다.