从现有字节[]生成新的byte []

pat*_*ite 2 java arrays

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

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

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

这可能吗?在使用缓冲区时,似乎是一个常见的事情.提前致谢,

Jes*_*per 5

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

byte[]您可以使用java.nio.ByteBuffer哪个允许您以您希望的方式切片缓冲区,而不是使用.

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

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

ByteBuffer shared = buffer.slice();
Run Code Online (Sandbox Code Playgroud)

请注意,ByteBuffer返回的buffer.slice()是指与原始缓冲区相同的基础字节数组.