『Java I/O』JavaNIO中需要注意的点

JavaNIO需要注意的点

相关视频参考(来自动力节点):https://www.bilibili.com/video/BV1uq4y1j7Kv

相关资料下载:http://www.bjpowernode.com/?csdn

1.、检查状态

当没有更多的数据时,拷贝就算完成,此时 read() 方法会返回 -1 ,我们可以根据这个方法判断是否读完。

int r= fcin.read( buffer );



if (r==-1) {

     break;

}

2、Buffer类的flip、clear方法

控制buffer状态的三个变量

position:跟踪已经写了多少数据或读了多少数据,它指向的是下一个字节来自哪个位置

limit:代表还有多少数据可以取出或还有多少空间可以写入,它的值小于等于capacity。

capacity:代表缓冲区的最大容量,一般新建一个缓冲区的时候,limit的值和capacity的值默认是相等的。

flip、clear这两个方法便是用来设置这些值的。

flip方法

我们先看一下flip的源码:

public final Buffer flip() {

    limit = position;

    position = 0;

    mark = -1;

    return this;

 }

 在上面的FileCopy程序中,写入数据之前我们调用了buffer.flip();方法,这个方法把当前的指针位置position设置成了limit,再将当前指针position指向数据的最开始端,我们现在可以将数据从缓冲区写入通道了。 position 被设置为 0,这意味着我们得到的下一个字节是第一个字节。 limit 已被设置为原来的 position,这意味着它包括以前读到的所有字节,并且一个字节也不多。

clear方法

先看一下clear的源码:

 public final Buffer clear() {

    position = 0;

    limit = capacity;

    mark = -1;

    return this;

}

在上面的FileCopy程序中,写入数据之后也就是读数据之前,我们调用了 buffer.clear();方法,这个方法重设缓冲区以便接收更多的字节。上图显示了在调用 clear() 后缓冲区的状态。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值