> Java > java지도 시간 > NIO 개요 및 NIO와 IO 비교

NIO 개요 및 NIO와 IO 비교

零下一度
풀어 주다: 2017-06-27 09:47:49
원래의
1692명이 탐색했습니다.

1 개요

1.NIO

Java1.4 버전에서 도입된 새로운 IO인 New IO는 표준 IO를 대체할 수 있습니다.

2.Channel

데이터를 읽고 쓸 수 있는 데이터 소스와의 개방형 연결을 나타냅니다. 이러한 읽기 및 쓰기 작업은 데이터 블록을 기반으로 합니다.

3.Buffer

채널이 데이터를 읽고 쓰기 위한 버퍼입니다. 채널은 읽은 데이터를 Buffer에 저장하고 Buffer에 있는 데이터를 파일에 씁니다.

4.선택기

하나의 스레드가 여러 채널을 모니터링할 수 있습니다.

5.RandomAccessFile

읽기, 쓰기 및 임의 액세스를 모두 지원하는 파일 작업 개체로, 파일의 모든 바이트를 포함하는 배열과 같습니다.

II NIO와 IO 비교

1. 기본 데이터 단위

IO는 바이트나 문자를 기본 단위로 사용하고, NIO는 데이터 블록을 기본 단위로 사용합니다.

2. 차단

IO 작업은 스레드를 차단하고 NIO는 스레드를 차단하지 않습니다.

3. 인덱스

IO 연산의 스트림에 대한 인덱스가 없으며, 연산 위치를 지정할 수 없습니다. NIO 데이터에는 인덱스가 있으며, 동작 위치를 지정할 수 있습니다.

4. 잠금

IO는 잠금을 지원하지 않고 NIO는 잠금을 지원하며 잠금 기능은 파일에 대한 액세스를 제어하는 ​​것입니다.

3개 채널

1. 객체 생성:

입력 및 출력 스트림을 기반으로 객체 생성:

InputStream is=new FileInputStream(String name);
FileChannel channel=is.getChannel();
로그인 후 복사

RandomAccessFile 객체를 기반으로 객체 생성

RandonAccessFile file=new RandomAccessFile(String name ,"rw");
FileChannel channel=file.getChannel();
로그인 후 복사

2 . 입력 기반 스트림으로 생성된 객체는 입력만 가능하고, 출력 스트림을 기반으로 생성된 객체는 출력만 가능하며, RandomAccessFile을 기반으로 생성된 객체는 입력과 출력이 모두 가능합니다.

3. 채널의 데이터에는 인덱스가 있으며, 읽기 및 쓰기 위치를 지정할 수 있습니다.

4. 일반적으로 사용되는 방법

  • truncate(long size): 지정된 바이트 길이의 내용을 처음부터 가로채서 나머지를 삭제합니다. 길이가 현재 파일 크기보다 크면 작업이 실패합니다.

Four Buffer

NIO는 각 기본 데이터 유형에 대한 버퍼를 제공합니다. 조작 방법은 ByteBuffer를 예로 들어 보겠습니다.

1. 세 가지 중요한 속성

  • 위치: 읽기 및 쓰기의 시작점을 결정하는 데 사용되는 현재 커서 위치입니다.

  • limit: 상한, 인덱스를 제외한 읽기 및 쓰기 범위를 결정하는 데 사용됩니다.

  • 용량: 저장할 수 있는 최대 데이터 양을 결정하는 데 사용되는 용량입니다.

2. 객체 생성

ByteBuffer byteBuffer=ByteBuffer.allocate();//通过分配指定长度的存储单位来创建缓冲区ByteBuffer byteBuffer=ByteBuffer.wrap(byte[] array);//基于数组创建缓冲区
로그인 후 복사

3.常用方法:

  • put(Object data):将数据写入当前位置,同时将光标向前移动一个数据单位。

  • get():获取当前位置的数据,同时将光标向前移动一个数据单位。

  • flip():通过调整position与limit的值切换读写模式。

  • clear():并非清空缓冲区,而是调整position=0,limit=capacity,mark=-1。

  • array():将ByteBuffer中的数据复制的数组中。

五 MappedByteBuffer

在系统当中建立文件的映射,如果采用读写模式,那么对该映射的操作会反映到文件中。

由于将文件映射到内存中,资源消耗较大,只有在文件较大的情况下才将文件映射到内存中。

获取对象

MappedByteBuffer mbb=channel.map(MapMode mode,long offset,long size);
로그인 후 복사

有3中映射方式:

  • READ_ONLY:映射内容只允许读,不允许修改。

  • READ_WRITE:映射内容既允许读,也允许改,修改内容会反映到文件中。

  • PRIVATE:在本地创建一个副本,读写操作都是针对副本,写不会反映到原始文件中。

위 내용은 NIO 개요 및 NIO와 IO 비교의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿