Ill*_*huk 48 java arrays containers
我有一些类库,使用我的数据,它被读入缓冲区.有可能以某种方式避免一次又一次地复制数组,将部分数据更深入地传递到处理方法中吗?好吧,这听起来很奇怪,但在我的特殊情况下,有一个特殊的编写器,它将数据分成块并将它们分别写入不同的位置,因此它只执行System.arraycopy,获得它需要的东西并调用底层编写器,用新的子阵列.这种情况多次发生.重构此类代码的最佳方法是什么?
Ric*_*son 63
Arrays.asList(array).subList(x, y).
Run Code Online (Sandbox Code Playgroud)
这个方法不会给你一个数组,但是a List
,它更灵活.
Rom*_*nko 12
没有真正的方法来包装任何数据而不复制和接收 Java中的真实arra y.您无法在现有内存上创建新阵列.你基本上有两个选择:
您可以使用java.nio.Buffer
类层次结构,尤其是java.nio.ByteBuffer
在整个数组或子范围上提供缓冲区抽象.通常这是人们需要的.这也提供了许多有趣的功能,如"零拷贝"翻转和灵活的字节区域表示.
这是使用包装的示例java.nio.ByteBuffer
.这应该非常接近您的需求.至少对于一些操作.
byte [] a1 = {0, 0, 1, 0};
ByteBuffer buf = ByteBuffer.wrap(a1,1,2);
Run Code Online (Sandbox Code Playgroud)
然后你可以做buf
任何ByteBuffer
操作.
只是一个警告,buf.array()
返回a1
包含所有元素的原始数组(后端).