Java学习笔记(10): NIO

相对于串流输入/输出使用InputStream、OutputStream来衔接数据源与目的地,NIO使用频道(Channel)来衔接数据节点,在处理数据时,NIO可以让你设定缓冲区(Buffer)容量,在缓冲区中对感兴趣的数据区块进行标记,像是标记读取位置、数据有效位置,对于这些区块标记,提供了clear()、rewind()、flip()、compact()等高级操作。

Channel架构与操作

  • NIO中Channel相关接口与类,位于java.nio.channels套件中。
  • Channel接口是AutoClosable的子接口。
  • ReadableByteChannel定义了read()方法,将ReadableByteChannel中的数据读取至ByteBuffer。
  • WritableByteChannel定义了write()方法,将ByteBuffer的数据写到WritableByteChannel中。
  • ScatteringByteChannel定义了read()方法,将ScatteringByteChannel分配到ByteBuffer数组中。
  • GatheringByteChannel定风了write()方法,将ByteBuffe数组的数据写到GatheringByteChannel。
  • ByteChannel没有定义任何方法,其子接口SeekableByteChannel可以读取与改变下一个要存取数据的位置。

Buffer架构与操作

  • 在NIO设计中,数据都是在java.nio.Buffer中处理,Buffer是个抽象类,定义了clear()、flip()、reset()、rewind()等对数据区块的高级操作,这类操作返回类型都是Buffer。
  • 根据不同的数据类型处理需求,可以选择不同的Buffer子类
容量、界限与存取位置
allocate()  指定Buffer容量
capacity()  取得Buffer容量的大小
array()     取得Buffer内部的数组
wrap()      将某数组转为某个Buffer子类实例
isDirect()  Buffer是否直接配置
limit()     得知或限定实际可读取或写入的数据界限索引值 
position()  得知或限定下一个可读取数据的位置索引值
clear()、flip()、rewind()
  • clear()方法用于写模式,其作用为清空Buffer中的内容,初始化缓存空间,例如读取文件时将文件内容置入缓存时要先执行此方法。所谓清空是指写上限与Buffer的真实容量相同,即limit==capacity,同时将当前写位置position置为最前端下标为0处。
  • flip()方法的作用是将写模式转变为读模式,即将写模式下的Buffer中内容的最后位置变为读模式下的limit位置,作为读越界位置,同时将当前读位置position置为0,表示转换后从头开始读。
  • rewind()在读写模式下都可用,它单纯的将当前位置position置0,而limit不变,这个方法通常用在想要重复读取Buffer中某段数据时使用,作用相当于单独调用Buffer的position(0)方法。
mark()、reset()、remaining()
  • mark()方法的作用是在目前position上标记,即使position改变,也会将position设回被mark()标记的位置。
  • reset()方法被调用,可以改变positon
  • position与limit之间为剩余可存取的资料,可以使用remaining()方法得知其中的长度。
  • hasRemaining()可以测试是否还有剩余可存取的数据。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值