NIO入门-了解Buffer

NIO入门-了解Buffer

NIO入门-了解Buffer

 

Buffer实例的状态由下面三个变量来决定:

  • Position,这个变量表明已经读写了多少数据;
  • Limit,这个变量表明还有多少数据需要读写;
  • Capacity,这个变量表明缓冲区的最大容量。

从大小关系来看,Position≤Limit≤Capacity。在通过Buffer进行读写的时候,Buffer.clear()和Buffer.flip()这两个函数将会改变这三个变量,我们可以通过下面这个例子来查看这个过程:

 

01import java.io.FileOutputStream;
02import java.nio.ByteBuffer;
03import java.nio.channels.FileChannel;
04 
05public class WriteFile {
06    static public void main(String args[]) throws Exception {
07        FileOutputStream fout = new FileOutputStream("out.txt");
08        FileChannel fcout = fout.getChannel();
09        ByteBuffer buffer = ByteBuffer.allocate(1024);
10 
11        buffer.putInt(3);
12        buffer.putInt(24);
13        buffer.putInt(7);
14        System.out.println(buffer.toString());
15        // 输出java.nio.HeapByteBuffer[pos=12 lim=1024 cap=1024]
16 
17        buffer.flip();
18        System.out.println(buffer.toString());
19        // 输出java.nio.HeapByteBuffer[pos=0 lim=12 cap=1024]
20 
21        fcout.write(buffer);
22        System.out.println(buffer.toString());
23        // 输出java.nio.HeapByteBuffer[pos=12 lim=12 cap=1024]
24 
25        buffer.clear();
26        System.out.println(buffer.toString());
27        // 输出java.nio.HeapByteBuffer[pos=0 lim=1024 cap=1024]
28    }
29}

 

当我们要将数据写到输出通道之前(fux注:即调用session.write方法前),我们必须调用 flip() 方法。这个方法做了两件事情:

  1. 它将 limit 设置为当前 position,在WriteFile.class中,limit被设置成12,这意味着Buffer实例中保存了12字节数据;
  2. 它将 position 设置为 0,在WriteFile.class中,position被设置成0,这意味着Buffer实例下一个读写的位置从0开始。

而clear() 方法会重设缓冲区以便接收更多的字节,这个方法做了两件事情:

  1. 它将 limit 设置为与 capacity 相同。
  2. 它设置 position 为 0。

 

 

 

 

 

posted on 2010-06-09 09:33 jiahuafu 阅读(...) 评论(...) 编辑 收藏

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

银狐游戏开发资源2

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值