在Java中:在哪里创建一个指向更大数组的一部分的子数组?

Vla*_*dim 11 java performance

学习Java,请温柔.理想情况下,我需要创建一个字节数组,指向更大数组的一部分:

byte[] big  = new byte[1000];

// C-style code starts
load(file,big);

byte[100] sub = big + 200; 

// C-style code ends
Run Code Online (Sandbox Code Playgroud)

我知道这在Java中是不可能的,并且有两种解决方法可以想到并包括:

  1. 要么通过大的复制部分迭代.

  2. 或者编写自己的类,它将引用big + offset + size并通过使用big作为实际底层数据结构的访问器方法实现"子阵列" .

我试图解决的任务是将文件加载到内存中,然后获取对通过类存储文件的记录的只读访问权限.速度是最重要的,因此理想情况下我想避免复制或访问方法.因为我正在学习Java,所以我想坚持下去.

我还有其他选择吗?如果我没有充分解释这项任务,请提出问题.

小智 22

在Java中,不可能将数组创建为其他数组的"视图".但是你可以使用java.nio.ByteBuffer,它基本上就是你在解决方案#2中建议的类.例如:

ByteBuffer subBuf = ByteBuffer.wrap(big, 200, 100).slice().asReadOnlyBuffer();
Run Code Online (Sandbox Code Playgroud)

不涉及复制(虽然创建了一些对象).作为一个标准的库类,我还假设ByteBuffer更有可能接受特殊处理.JVM的"JIT"优化比自定义优化.