Java NIO 대 IO
Java NIO는 기존 Java IO API의 발전을 위해 도입 된 것으로 알고 있습니다. NIO를 IO보다 효율적으로 만드는 주요 개선 사항은 NIO에서 사용되는 채널 데이터 흐름 모델과 기존 IO 작업을위한 운영 체제 사용입니다.
Java NIO와 Java IO의 차이점은 다음과 같이 설명 할 수 있습니다.
이전 게시물에서 언급했듯이 I / O 작업을위한 NIO 버퍼 및 채널 지향 데이터 흐름에서 IO에 비해 더 빠른 실행과 더 나은 성능을 제공합니다. 또한 NIO는 기존 I / O 작업에 운영 체제를 사용하여 다시 한 번 더 효율적입니다.
NIO와 IO의 다른 차이점은이 IO는 스트림 라인 데이터 흐름을 사용한다는 것입니다. 즉, 한 번에 하나 이상의 바이트를 사용하고 데이터 개체를 바이트로 또는 그 반대로 변환하는 데 의존하는 반면 NIO는 바이트 청크 인 데이터 블록을 처리합니다.
Java에서 IO 스트림 객체는 단방향이고 NIO 채널에서는 양방향으로 채널이 데이터 읽기와 쓰기 모두에 사용될 수 있습니다.
IO의 간소화 된 데이터 흐름은 데이터에서 앞뒤로 이동할 수 없습니다. 스트림에서 읽은 데이터에서 앞뒤로 이동해야하는 경우 먼저 버퍼에 캐시해야합니다 .NIO의 경우 버퍼 지향을 사용합니다. 캐싱없이 데이터를 앞뒤로 액세스 할 수 있습니다.
NIO API는 또한 IO 작업을 수행하는 동안 현재 스레드가 차단되지 않는 방식으로 데이터를 비동기 적으로 읽고 쓸 수 있도록 다중 스레딩을 지원하여 기존 Java IO API보다 더 효율적입니다.
다중 스레딩의 개념은 Selectors 자바 NIO에서 비동기 또는 비 차단 방식으로 IO 이벤트에 대한 여러 채널을 수신 할 수 있습니다.
NIO의 멀티 스레딩은 Non- 블로킹으로 데이터를 사용할 수있을 때만 쓰레드를 읽거나 쓰도록 요청하는 것을 의미합니다. 그렇지 않으면 다른 작업에서 쓰레드를 그동안 사용할 수 있지만, 기존 자바 IO에서는 멀티 스레딩이 없어서 불가능합니다. 그것은 Blocking으로 만드는 그것에서 지원됩니다.
NIO는 하나의 쓰레드만으로 여러 채널을 관리 할 수 있지만, Java IO의 경우 블로킹 스트림에서 데이터를 읽을 때보 다 데이터 파싱이 다소 복잡 할 수 있으므로 매우 높은 대역폭의 연결이 필요한 경우가 적습니다. 한 번에 많은 데이터를 보내면이 경우보다 Java IO API가 가장 적합 할 수 있습니다.