所以我编写了一些东西来测试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?
答案 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
。
ByteBuffer.wrap
不复制数组,只是在指定数组周围创建一个对象,让您直接使用数组。