在NIO中如何循环将Channel的数据写到Buffer中??

下面这个例子用FileChannel作为IO操作者(当然你也可以用SocketChannel)


定义用于每次循环中存放数据的StringBuffer实例sb

定义容量为1024byte的ByteBuffer实例bb

定义原始的FileInputStream实例fis,关联到E盘的叫做1.txt的文本文件

用fis来获取FileChannel实例fc


循环将管道(这里是FileChannel)中的数据写到ByteBuffer实例bb中去,并将bb中的数据追加到StringBuffer实例去,最后将StringBuffer中的内容打印出来。


这里要注意的是ByteBuffer的hasRemaining()方法是用来判断Buffer中是否还有数据没被处理过。filp()是将limit置为position,position置为0。clear()是将position置为0,limit置为capacity。


·以下为完整的代码:


改正错误:上面连续读取的那个while循环的边界条件应该要改为i > 0才是最佳的。因为i不一定是都会是取到-1这个边界值得,可能会取到比-1小的数,这个时候就会陷入死循环中...在FileChannel中这种情况比较少见,而在SocketChannel中,这种情况则是会发生的。我就是在写基于NIO的echoServer的时候发现这个问题的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值