您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息
免费发信息

NIO的概述及NIO与IO的对比

2024/4/18 12:23:14发布9次查看
一 概述
 1.nio    new io,从java1.4版本引入的新io,可以替代标准的io。
       2.channel    代表一个与数据源的开放连接,可以读写数据,这种读写操作都是基于数据块。
  3.buffer    channel读写数据的缓冲区,channel将读取的数据存放到buffer中,将buffer中的数据写入文件中。
  4.selector    允许一个线程监控多个channel。
  5.randomaccessfile    一个同时支持读写、随机访问的文件操作对象,相当于一个包含文件全部字节的数组。
二 nio与io对比  1.基本数据单位    io以字节或者字符为基本单位,nio以数据块为基本单位。
  2.阻塞    io操作阻塞线程,nio不会阻塞线程。
  3.索引    io操作的流不存在索引,无法指定操作位置。nio的数据中存在索引,可以指定操作位置。
  4.锁    io不支持锁,nio支持锁,锁的作用是控制对文件的访问。
   三 channel  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.channel中的数据存在索引,可以指定读写位置。
4.常用方法 truncate(long size):从开头截取指定字节长度的内容,其余部分删除。如果长度大于文件当前大小,该操作失效。
四 buffer nio为每一个基本数据类型都提供了一个缓冲区,操纵方法相同,下面以bytebuffer为例进行梳理。
1.三个重要属性 position:当前光标位置,用于确定读写的起点。
limit:上限,用于确定读写的范围,不包含所在索引。
capacity:容量,用于确定所能存放的最大数据量。
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的对比的详细内容。
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录