Java의 입출력 관련 클래스는 너무나 많은데, 크게
java.io 패키지와 java.nio 패키지로 구분할 수 있다.
둘의 차이를 쉽게말하면 IO의 기능들을 개선하고 새로운 기능을 추가(대표적으로 비동기/Non-Blocking 지원)하여 나온 것이 NIO라고 생각하면 된다.
그럼 무조건 IO보다 NIO가 좋은가?
답은 아니다. NIO가 많은 기능을 개선한 것은 사실이나 특정 상황에서는 IO보다 성능이 떨어지는 경우도 있다.
아래에서 좀 더 자세히 살펴보자.
대략적인 IO 패키지 구조이다.
File 정보를 String 타입으로 넣는것 보다 File 클래스의 인스턴스에 정보를 입력하고 사용하면 안전하게 작업할 수 있다.
IO 패키지에서는 스트림이라는 단방향 통로를 사용하여 외부 데이터와 통신한다.
Byte Stream
Character Stream
단방향이란 데이터를 0번지부터 끝까지 순서대로 가져오고, 한번 데이터를 읽고나면 다시 돌아갈 수 없음을 의미한다.
데이터를 한번에 하나씩 처리하는 기본 스트림에 반해 Buffer는 데이터를 한번에 모아서 가져오기 때문에 속도와 성능면에서 크게 개선되었다.
New IO라는 이름처럼 IO 패키지의 업그레이드 버전이다.
Java7에서 NIO2라고 새로 나왔는데 NIO와 NIO2를 구분하진 않겠다.
allocateDirect() 로 생성하는 버퍼 외에는 모두 커널 버퍼가 아닌 JVM 내에서 생성되는 버퍼이다.
크게 아래와 같다.
File을 다루는 것의 차이는 아래와 같다.
이외에도 너무 많은 클래스와 메서드들이 있기 때문에 필요에 따라 상황에 따라 적절한 입출력 패키지를 사용하면 될 것이다.