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
'JAVA > 지식' 카테고리의 다른 글
[파일 변경 감지] WatchService(와치서비스) (0) | 2021.01.13 |
---|---|
[외부 데이터 입출력] java.nio (3/3) (0) | 2021.01.11 |
[외부 데이터 입출력] java.io (2/3) (0) | 2021.01.11 |
[우선순위 큐] PriorityQueue 사용법 (0) | 2020.12.21 |
[extends, implements 차이] 간단정리 (0) | 2020.12.21 |