在java的nio里面,数据的读写,一般都是通过Buffer来实现的。
其实Buffer就是一个临时存放数据的容器而已。
Buffer有四个变量:
position:表示当前写入的单位数据数量或者当前读取的单位数据位置。
limit:表示代表最多能写多少单位数据或者最多能读多少单位数据。
capacity:Buffer的容量。
mark:标记位置。
四者之间有这样子的关系:0 <= mark <= 位置 <= limit <= capacity
Buffer的一些操作:
// 创建Buffer ByteBuffer bb = ByteBuffer.allocate(1024); // 读取信息前必须清除Buffer bb.clear(); // 读取信息 int count = channel.read(bb); // 获取buffer内容 byte[] data = new byte[count]; bb.get(data, 0, count); // 写数据前必须调用 bb.flip(); // 写数据 channel.write(bb);
基本上Buffer的操作就这些。读信息的时候,如果count==0,则是读完。如果count<0,通常是连接已经中断。
记得读取信息和写信息的时候,必须先分别调用clear()和flip()方法。
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于