JAVA/지식

[외부 데이터 입출력] java.io/java.nio 차이 (1/3)

우엥우아앙 2021. 1. 11. 14:09
java.io java.nio
one-way (InputStream or OutputStream) two-way (Channel)
구현체에 따라 primitive부터 object까지 가능하나, 기본적으로는 byte 또는 byte[] Buffer
Blocking Non-blocking 도 가능 (언제나 Non-blocking 은 아님)

 

여러 특징이 있지만 간단히 정리하면 IO는 스트림(Stream) 이라는 단방향 통로를 생성해서 외부 데이터와 통신하고, NIO는 채널(Channel)이라는 양방향 통로를 생성해서 외부 데이터와 통신합니다.

즉, NIO는 IO와 달리 읽기/쓰기를 하나의 통로로 해결할 수 있습니다.

 

또한 기본적으로 입출력 시 버터(buffer)를 사용하여 속도가 빠릅니다. 하지만 이 점은 IO에서도 필터 스트림을 통해 사용할 수 있으므로 큰 차이는 아니라고 생각합니다. 물론 컨널 버퍼를 직접 다룰 수 있도록 함으로써 속도를 높일 수 있는 기능이 있지만 장단점이 존재합니다.

 

마지막으로 NIO의 가장 큰 특징은 비동기/non-blocking 방식을 지원한다는 점입니다.

 

요약하자면 자바 개발자들이 기존 java.io 패키지의 입출력 클래스들이 맘에 들지 않아 java.nio(new IO)라는 패키지를 새로 만들었습니다. 새로운 개념과 기능들이 잔뜩 들어가 있어서 성능은 좋아졌으나 사용하기가 까다로워졌고, 또 많은 기능 때문에 오히려 특정 상황에서는 기존 IO에 비해 성능이 떨어지기도 합니다.

 

 

참고 : https://codevang.tistory.com/154