本站首页    管理页面    写新日志    退出


«October 2025»
1234
567891011
12131415161718
19202122232425
262728293031


公告
本博客在此声明所有文章均为转摘,只做资料收集使用。并无其他商业用途。

我的分类(专题)

日志更新

最新评论

留言板

链接

Blog信息
blog名称:
日志总数:210
评论数量:205
留言数量:-19
访问次数:923086
建立时间:2007年5月10日




[J2SE相关]java.nio.Buffer分析
文章收藏,  网上资源,  软件技术,  电脑与网络

李小白 发表于 2009/8/20 17:55:18

在研究Apache Mina源代码时,在IoFilter中使用IoBuffer做为数据缓冲对象,而IoBuffer的实现来自于java.nio.Buffer。Buffer中的flip()、clear()、reset()、mark()等概念让我有点糊涂,仔细看了jdk的文档说明,才对Buffer对象的概念了然于胸。 在Buffer类当中有以下四个重要的属性: mark:标记位,用于reset()时把position恢复到原来的位置,调用mark()方法使position的值赋与mark position:表示Buffer中第一个可以被读取或写入的数据的位置,每次调用put()方法时,把写入的数据放到position位置,然后position的值就会加1 limit:表示buffer中第一个不可被读取或写入的数据的位置,也即停止位,数据操作到此为止 capacity:初始化时调用allocate(int size)为buffer分配的空间大小,不可变 演示代码如下: view plaincopy to clipboardprint? import java.nio.ByteBuffer; public class ByteBufferTest { public static void main(String[] args) { ByteBuffer bb=ByteBuffer.allocate(10); for(int i=1;i<9;i++){ bb.put((byte)i); } System.out.println("pos:"+bb.position()); System.out.println("limit:"+bb.limit()); System.out.println("cap:"+bb.capacity()); bb.flip(); System.out.println("\nafter flip"); System.out.println("pos:"+bb.position()); System.out.println("limit:"+bb.limit()); System.out.println("cap:"+bb.capacity()); bb.mark(); System.out.println("\nafter mark"); System.out.println("pos:"+bb.position()); System.out.println("limit:"+bb.limit()); System.out.println("cap:"+bb.capacity()); bb.reset(); System.out.println("\nafter reset"); System.out.println("pos:"+bb.position()); System.out.println("limit:"+bb.limit()); System.out.println("cap:"+bb.capacity()); bb.clear(); System.out.println("\nafter clear"); System.out.println("pos:"+bb.position()); System.out.println("limit:"+bb.limit()); System.out.println("cap:"+bb.capacity()); bb.limit(1); bb.put((byte)9); bb.put((byte)10);//超出limit范围,抛出java.nio.BufferOverflowException异常 bb.put((byte)11); } } 输出结果: view plaincopy to clipboardprint? pos:8 limit:10 cap:10 after flip pos:0 limit:8 cap:10 after mark pos:0 limit:8 cap:10 after reset pos:0 limit:8 cap:10 after clear pos:0 limit:10 cap:10 Exception in thread "main" java.nio.BufferOverflowException at java.nio.Buffer.nextPutIndex(Buffer.java:419) at java.nio.HeapByteBuffer.put(HeapByteBuffer.java:145) at com.gftech.mytool.mina.ByteBufferTest.main(ByteBufferTest.java:45)


阅读全文(2177) | 回复(0) | 编辑 | 精华
 



发表评论:
昵称:
密码:
主页:
标题:
验证码:  (不区分大小写,请仔细填写,输错需重写评论内容!)



站点首页 | 联系我们 | 博客注册 | 博客登陆

Sponsored By W3CHINA
W3CHINA Blog 0.8 Processed in 0.031 second(s), page refreshed 144794311 times.
《全国人大常委会关于维护互联网安全的决定》  《计算机信息网络国际联网安全保护管理办法》
苏ICP备05006046号