Programing

자바 : NIO와 NIO.2의 차이점은 정확히 무엇입니까?

crosscheck 2020. 10. 27. 07:51
반응형

자바 : NIO와 NIO.2의 차이점은 정확히 무엇입니까?


서로 얼마나 다른지 잘 모르기 때문에이 두 패키지에 대해 몇 가지 질문이 있습니다.

Google에서 약간 살펴본 결과 Oracle 은 JDK7 릴리스의 일부로 NIO새롭고 향상된 NIO.2패키지로 패키지 를 업데이트하기로 결정한 것 같습니다 .

  1. NIO패키지 의 성능은 패키지와 어떻게 비교 NIO.2됩니까?
  2. 에서 NIO로의 큰 변화는 무엇입니까 NIO.2? (예 : 새로운 방법, 기능)
  3. 원래 NIO패키지를 업데이트해야하는 이유는 무엇 입니까?
  4. NIO.2그냥 동의어 NIO요즘 패키지?

내 코드에서 레거시 패키지를 사용하고 싶은 것이 아니라 이것에 대해 정말 궁금합니다. 차이점을 알려주세요.


Java는 처음에 파일 시스템에 액세스하기 File위해 java.io패키지 에서 클래스 를 제공함으로써 시작되었습니다 . 이 개체는 파일 / 디렉터리를 나타내며 파일 / 디렉터리가 있는지 확인하고 속성을 가져 와서 삭제하는 등의 일부 작업을 수행 할 수 있습니다. 하지만 몇 가지 단점이있었습니다. 몇 가지를 예로 들면 :

  • File 클래스에는 복사 방법과 같은 몇 가지 중요한 기능이 없습니다.
  • 또한 boolean. 상상할 수 있듯이 오류가 발생 false하면 예외가 발생하지 않고 반환되었습니다. 실제로 개발자는 실패 이유를 알 수 없었습니다.
  • 심볼릭 링크 지원에 대한 적절한 처리를 제공하지 않았습니다.
  • 제한된 파일 속성 세트가 제공되었습니다.

이러한 문제를 극복하기 위해 java.nio 패키지가 java 4에 도입되었습니다. 주요 기능은 다음과 같습니다.

  • 채널 및 선택기 : 채널은 메모리 매핑 파일과 같은 하위 수준 파일 시스템 기능에 대한 추상화입니다.
  • 버퍼 : 모든 기본 클래스에 대한 버퍼링 (부울 제외).
  • 문자셋 : 문자셋 (java.nio.charset), 인코더 및 디코더를 사용하여 바이트 및 유니 코드 기호 매핑

java 7에서는 java.nio.file 패키지가 도입되어 심볼릭 링크, 파일 속성 액세스를 처리하는 데 더 나은 지원을 제공하고 특히 Path, Paths 및 Files와 같은 클래스를 통해 확장 된 파일 시스템을 지원합니다. 이에 대한 자세한 내용 java.nio.file 패키지 설명 을 참조하십시오.

이를 염두에두고 :

NIO에서 NIO.2 로의 큰 변화는 무엇입니까? (예 : 새로운 방법, 기능)?

그들은 다른 목적으로 사용됩니다. 큰 변화를 지적하기 위해 완전히 새로운 패키지를 살펴 보는 것이 좋습니다 java.nio.file.

원래 NIO 패키지를 업데이트해야하는 이유는 무엇입니까?

그렇지 않았습니다. 업데이트가 아닌 새로운 패키지가 도입되었습니다.

NIO.2는 요즘 NIO 패키지와 동의어일까요? NIO 패키지의 성능은 NIO.2 패키지와 어떻게 비교됩니까?

아니요, 동의어가 아닙니다. 또한 서로 다른 용도로 사용되기 때문에 성능을 비교하는 것도 의미가 없습니다. NIO는 좀 더 추상적 인 저수준 데이터 I / O이고 NIO2는 파일 관리에 중점을 둡니다.

도움이 되었기를 바랍니다.

[참고 문헌 : Oracle Certified Professional Java SE7-포괄적 인 OCJP7 인증 가이드, SGGanesh 및 Tushar Sharma-9 장]


NIO.2는 비동기식 I / O를 도입했습니다 .

비동기 I / O는 NIO에서 지원하지 않는 비 블로킹 I / O에 대한 접근 방식입니다.

NIO : 선택기 / 반응기 패턴

NIO.2 : 완료 핸들러 / 프로 액터 패턴

따라서 Windows에서 NIO.2는 I / O 완료 포트를 사용하므로 성능이 향상됩니다. 예외는 아무도 모르기 때문입니다. 서버 측에서 Windows를 사용하는 사람이 아무도 없기 때문이며, 사용하는 경우 .net에 막대한 투자를했기 때문에 그렇게 할 가능성이 높기 때문에 Java 사용을 고려하지 않을 가능성이 큽니다.


내 테이크 :

짧은 버전

높은 수준의 훨씬 향상된 파일 및 파일 시스템 기능을 갖춘 java.nio.file 패키지가 추가되었습니다.
네트워크 소켓 또는 낮은 수준의 파일 액세스 관점에서 NIO == NIO.2와 몇 가지 편의 개선 사항이 있습니다.

더 긴 버전

자바 IO

패키지 : java.io
이전 차단 I / O API

자바 NIO

새로운 비 차단 API 인 Java 1.4에 추가되었습니다.
패키지 : java.nio
Java non-blocking IO. 수업은 좋아 Selector, SelectorKey, Channel.
NIO는 I / O가 (네트워크를위한 큰 걸음을했다 나에게 보인다 Selector, SelectorKey, SocketChannel, ServerSocketChannel, Buffer), 훨씬 적은 파일에 대한 I / O를 ( FileChannelBuffer단지를 포함하여 메모리 매핑 된 파일). 이것은 네트워크 및 파일 부분 모두에 대해 상당히 낮은 수준의 API입니다.

자바 NIO.2

Java 7에 추가되었습니다. 주로 훨씬 향상된 파일 및 파일 시스템 조작과 주소 지정 API를 추가하는 것입니다. 새로운 파일 및 파일 시스템 관련 API는 상대적으로 높은 수준입니다.

패키지 : java.nio.file부모에 대한 몇 가지 추가 사항 java.nio.
이 추가 사항은 파일 I / O 용이며 네트워크 I / O 또는 저수준 파일 API에 대한 몇 가지 사소한 추가 사항입니다.

Most notable low-level, not necessary file related, API additions are AsynchronousSocketChannel, AsynchronousServerSocketChannel and AsynchronousFileChannel, which adds callbacks variants to some methods. The Asynchronous versions of are mainly a convenience addition; such mapping interfaces could have been hacked together even before, but now they are available out-of-the box in the JRE.

The new file API brings a lots of goodies - much more useful file system addressing with Path, much improved ZIP file manipulation using custom file system provider, special file attributes access, lots of convenience methods like reading whole file with one command, copying file with one command etc. But it's all file/filesystem related and all quite high level.

Reiterating what I have already said above, from the perspective of network sockets or low level file access, NIO == NIO.2

Relevant links

참고URL : https://stackoverflow.com/questions/25537675/java-what-exactly-is-the-difference-between-nio-and-nio-2

반응형