NIO学习之ByteBuffer理解篇

Posted 彼岸花you

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了NIO学习之ByteBuffer理解篇相关的知识,希望对你有一定的参考价值。

NIO系列教程网址:http://ifeve.com/overview/
NIO系列:http://blog.csdn.net/fan2012huan/article/details/51318006

1、 向ByteBuffer中写入数据

② 读取数据
可以根据pos 和limit来获取ByteBuffer里面的任意位置的数据。
buf.position 指定数据的开始位置
buf.limit 指定数据的结束位置
buf.array 整个ByteBuffer内的数据
2、ByteBuffer.flip()操作

 flip其实就是对position和limit进行重新赋值,pos置0,limit的位置为原来pos。

3、ByteBuffer.compact()操作

buf.compact();根据pos,将buf pos后面的数据整体迁移pos个位置。最后的limit byteBuffer的大小就为oldSize-pos;pos=0;
4、byteBuffer.clear()操作

5、ByteBuffer的其他操作–略
6、ByteBuffer操作小结
对于ByteBuffer的操作,并不是真正的去操作里面的数据,更多的是根据pos和limit的操作去获取指定的数据以及进行数据的覆盖。

    ByteBuffer byteBuffer = ByteBuffer.allocate(1024);
           byteBuffer.put("1234".getBytes());
           byteBuffer.clear();//
           byteBuffer.put("666".getBytes());
           byteBuffer.position(0);//使用flip时,limit=3 pos=0 就看不到第四个位置了 所以这里不能使用flip
           byteBuffer.limit(4);
           System.out.println(new String(byteBuffer.array()));
 可以看到 后面输入的666是对前面的1234进行了覆盖。

常用操作:
–写数据时
put数据之后,进行flip –flip之后pos=0 limit就是数据的个数
–读取数据时:
new String(buf.array(),0,limit);–上面使用了flip,根据个数来取数据

以上是关于NIO学习之ByteBuffer理解篇的主要内容,如果未能解决你的问题,请参考以下文章

28 Java学习之NIO Buffer(待补充)

NIO 之 ByteBuffer

NIO学习之NIO概述和FileChannel详解

nio学习之Selector选择器

NIO理解

NIO学习之ServerSocketChannel和SocketChannel