bytebuffer如何包装?

时间:2016-03-12 20:09:43

标签: java

所以我编写了一些东西来测试ByteBuffer包装函数:

byte[] cArr = ..

System.out.println("cArr length is " + cArr.length);

ByteBuffer e = ByteBuffer.wrap(cArr, 0, cArr.length );

System.out.println("e length is " + e.array().length);

ByteBuffer d = ByteBuffer.wrap(cArr, 4, 8 );

System.out.println("d length is " + d.array().length);

这是输出:

  

cArr长度为12

     

长度为12

     

d长度为12

为什么即使在包装并指定长度为8后,d的长度仍为12?

1 个答案:

答案 0 :(得分:0)

  

为什么即使在包装并指定长度为8后,d的长度仍为12?

从字面上看,因为d.array() cArr

  

新缓冲区将由给定的字节数组支持;也就是说,对缓冲区的修改将导致数组被修改,反之亦然。 新缓冲区的容量为array.length ,其位置为offset,其限制为offset + length,其标记将不确定。 它的后备数组将是给定数组,其数组偏移量将为零。

采取以下片段:

byte[] arr = new byte[12];
ByteBuffer buf = ByteBuffer.wrap(arr, 4, 8);
System.out.println(buf.array() == arr);

打印 true

http://ideone.com/bqDdDs

ByteBuffer.wrap不复制数组,只是在指定数组周围创建一个对象,让您直接使用数组。