Java中的字节数组切片
我正在尝试对字节数组进行切片,以修剪数组的第一部分。我正在使用ByteBuffer,但它的行为与我预期的不同
byte[] myArray = new byte[10];
ByteBuffer buf = ByteBuffer.wrap(myArray);
buf.position(5);
ByteBuffer slicedBuf = buf.slice();
byte[] newArray = slicedBuf.array();
我希望新数组的大小为5,只包含字节缓冲区的最后一部分。而是返回完整字节数组。我明白这是因为“后备缓冲区”一直都是一样的
如何切片以仅获得阵列的所需部分
编辑:添加上下文
字节从网络接收。缓冲区是这样形成的:
[ SHA1 hash ] [ data... lots of it ]
我已经有了一个函数,它将字节数组作为参数,并计算SHA1散列。我想要的是分割整个缓冲区,只传递数据,而不传递预期的散列
# 1 楼答案
可以使用^{} 方法。例如:
# 2 楼答案
您创建的
ByteBuffer
由该数组支持。当你调用slice()
时,你实际上会收到一个特定的视图:因此,对返回的
ByteBuffer
调用array()
将返回整个支持数组要从该视图中提取所有字节,可以执行以下操作:
该视图中的字节将被复制到新数组中
编辑以从下面的评论中添加:值得注意的是,如果您感兴趣的只是将字节从一个
byte[]
复制到另一个byte[]
,那么就没有理由使用ByteBuffer
;只需复制字节