1 개요
Java1.4 버전에서 도입된 새로운 IO인 New IO는 표준 IO를 대체할 수 있습니다.
데이터를 읽고 쓸 수 있는 데이터 소스와의 개방형 연결을 나타냅니다. 이러한 읽기 및 쓰기 작업은 데이터 블록을 기반으로 합니다.
채널이 데이터를 읽고 쓰기 위한 버퍼입니다. 채널은 읽은 데이터를 Buffer에 저장하고 Buffer에 있는 데이터를 파일에 씁니다.
하나의 스레드가 여러 채널을 모니터링할 수 있습니다.
읽기, 쓰기 및 임의 액세스를 모두 지원하는 파일 작업 개체로, 파일의 모든 바이트를 포함하는 배열과 같습니다.
IO는 바이트나 문자를 기본 단위로 사용하고, NIO는 데이터 블록을 기본 단위로 사용합니다.
IO 작업은 스레드를 차단하고 NIO는 스레드를 차단하지 않습니다.
IO 연산의 스트림에 대한 인덱스가 없으며, 연산 위치를 지정할 수 없습니다. NIO 데이터에는 인덱스가 있으며, 동작 위치를 지정할 수 있습니다.
IO는 잠금을 지원하지 않고 NIO는 잠금을 지원하며 잠금 기능은 파일에 대한 액세스를 제어하는 것입니다.
입력 및 출력 스트림을 기반으로 객체 생성:
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. 일반적으로 사용되는 방법
1. 세 가지 중요한 속성
ByteBuffer byteBuffer=ByteBuffer.allocate();//通过分配指定长度的存储单位来创建缓冲区ByteBuffer byteBuffer=ByteBuffer.wrap(byte[] array);//基于数组创建缓冲区
put(Object data):将数据写入当前位置,同时将光标向前移动一个数据单位。
get():获取当前位置的数据,同时将光标向前移动一个数据单位。
flip():通过调整position与limit的值切换读写模式。
clear():并非清空缓冲区,而是调整position=0,limit=capacity,mark=-1。
array():将ByteBuffer中的数据复制的数组中。
在系统当中建立文件的映射,如果采用读写模式,那么对该映射的操作会反映到文件中。
由于将文件映射到内存中,资源消耗较大,只有在文件较大的情况下才将文件映射到内存中。
MappedByteBuffer mbb=channel.map(MapMode mode,long offset,long size);
有3中映射方式:
READ_ONLY:映射内容只允许读,不允许修改。
READ_WRITE:映射内容既允许读,也允许改,修改内容会反映到文件中。
PRIVATE:在本地创建一个副本,读写操作都是针对副本,写不会反映到原始文件中。
위 내용은 NIO 개요 및 NIO와 IO 비교의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!