gpt4 book ai didi

java - 从现有的 byte[] 生成新的 byte[]

转载 作者:行者123 更新时间:2023-11-30 07:01:28 32 4
gpt4 key购买 nike

我想从现有字节数组生成一个"new"字节数组,而不必实际从堆中分配。换句话说,"new"字节数组应该与现有字节数组共享相同的底层数据。问题是我希望新的字节数组具有不同的长度。

byte[] buffer = { 0x01, 0x02, 0x04, 0x08, 0x10 };
byte[] shared = slice(buffer, 1, 3);
/* shared should be { 0x02, 0x04, 0x08 } and have length of 3 */

我这样做是因为我有一个字节数组,我需要从中提取一个数据包,然后将该数据包传递给一个只需要一个 byte[] 的单参数方法。我想避免复制数据包中包含的数据。出于我的目的,可以假设 buffer 的内容不会在 shared 的范围内改变。

这可能吗?这似乎是人们在使用缓冲区时想要做的一件常见的事情。提前致谢,

最佳答案

不,在 Java 中不可能有(部分)共享相同内存的不同 byte[]

您可以使用 java.nio.ByteBuffer 而不是使用 byte[]这确实允许您以您想要的方式对缓冲区进行切片。

ByteBuffer buffer = ByteBuffer.wrap(new byte[]{ 0x01, 0x02, 0x04, 0x08, 0x10 });

buffer.position(1);
buffer.limit(4);

ByteBuffer shared = buffer.slice();

请注意,buffer.slice() 返回的 ByteBuffer 引用与原始缓冲区相同的底层字节数组。

关于java - 从现有的 byte[] 生成新的 byte[],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29807421/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com