java nio基础教程

最近看到招聘上面要求对java nio知识的需求比较多 所有没事研究了下   

java nio故名思议 就是 java new io 也就是在原有的io基础上做进一步扩充 性能提升等等

java nio中新增了2个常用的名词 channel 跟buffer   

老办法先上一个例子来说明下具体操作


从上面的例子中我们基本上可以了解channel跟buffer的用处     channel 就是一个对象 可以通过他来读取和写入数据 就跟io里面的流一样。在java nio中所有的操作都是通过

buffer来进行的 也就是说您永远也不会将字节写入通道中 相反 您是将数据写入包含一个或者多个字节的缓冲区 读取也一样。又因为通道是双向的所有速度要不留要快


从上面的例子可以看出 读跟写文件基本上需要3个步骤来进行   首选 从fileInputStream获取channel    其实 创建buffer 最好从channel读取或者写入buffer中。

这就是基本上的操作


例子中的buffer.clear()跟buffer.flip()的用法

clear() 方法重设缓冲区,使它可以接受读入的数据。 flip() 方法让缓冲区可以将新读入的数据写入另一个通道。

可以用三个值指定缓冲区在任意时刻的状态:

• position

• limit

• capacity

这三个变量一起可以跟踪缓冲区的状态和它所包含的数据。我们将在下面的小节中详细分析每一个变量,还要介绍它们如何适应典型的读/写(输入/输出)进程。在这个例子中,我们假定要将数据从一个输入通道拷贝到一个输出通道。

Position

您可以回想一下,缓冲区实际上就是美化了的数组。在从通道读取时,您将所读取的数据放到底层的数组中。 position 变量跟踪已经写了多少数据。更准确地说,它指定了下一个字节将放到数组的哪一个元素中。因此,如果您从通道中读三个字节到缓冲区中,那么缓冲区的 position 将会设置为3,指向数组中第四个元素。

同样,在写入通道时,您是从缓冲区中获取数据。 position 值跟踪从缓冲区中获取了多少数据。更准确地说,它指定下一个字节来自数组的哪一个元素。因此如果从缓冲区写了5个字节到通道中,那么缓冲区的 position 将被设置为5,指向数组的第六个元素。

Limit

limit 变量表明还有多少数据需要取出(在从缓冲区写入通道时),或者还有多少空间可以放入数据(在从通道读入缓冲区时)。

position 总是小于或者等于 limit。

Capacity

缓冲区的 capacity 表明可以储存在缓冲区中的最大数据容量。实际上,它指定了底层数组的大小 ― 或者至少是指定了准许我们使用的底层数组的容量。

limit 决不能大于 capacity。





  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值