`
zhanglibin1986
  • 浏览: 374945 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

ByteBuffer笔记

    博客分类:
  • Java
 
阅读更多
# public static ByteBuffer wrap(byte[] array)
将array中的数据包装到ByteBuffer中
byte[] array = new byte[1024];
ByteBuffer buffer = ByteBuffer.wrap(array);

等效于
ByteBuffer buffer = ByteBuffer.allocate(1024); //分配一定的空间,1024

在NIO中,数据的读写操作始终是与缓冲区相关联的.读取时信道(SocketChannel)将数据读入缓冲区,写入时首先要将发送的数据按顺序填入缓冲区.缓冲区是定长的,基本上它只是一个列表,它的所有元素都是基本数据类型.ByteBuffer是最常用的缓冲区,它提供了读写其他数据类型的方法,且信道的读写方法只接收ByteBuffer.因此ByteBuffer的用法是有必要牢固掌握的.

1.创建ByteBuffer
1.1 使用allocate()静态方法
    ByteBuffer buffer=ByteBuffer.allocate(256);
    以上方法将创建一个容量为256字节的ByteBuffer,如果发现创建的缓冲区容量太小,唯一的选择就是重新创建一个大小合适的缓冲区.

1.2 通过包装一个已有的数组来创建
    如下,通过包装的方法创建的缓冲区保留了被包装数组内保存的数据.
    ByteBuffer buffer=ByteBuffer.wrap(byteArray);

    如果要将一个字符串存入ByteBuffer,可以如下操作:
    String sendString="你好,服务器. ";
    ByteBuffer sendBuffer=ByteBuffer.wrap(sendString.getBytes("UTF-16"));
分享到:
评论
1 楼 spdx4046 2012-07-27  
我发现用数组和不用数组的差别很大很大哎!
比如:      
ByteBuffer buffer = ByteBuffer.allocate( 100 );
        ByteBuffer buffer1 = ByteBuffer.allocate(100);
       
        ByteBuffer[] bs = new ByteBuffer[2];
        bs[0] = buffer;
        bs[1] = buffer1;

然后**.read(bs);



ByteBuffer buffer = ByteBuffer.allocate( 200 );
然后**.read(buffer)

这两者的效率是几倍的关系!

本想用ByteBuffer数组的方式 处理原本需要substring方式截取字符串解析数据的,现在不能用了!

相关推荐

Global site tag (gtag.js) - Google Analytics