学习Java,请温柔一点。理想情况下,我需要创建一个字节数组,该字节数组将指向更大数组的一部分:
byte[] big = new byte[1000];
// C-style code starts
load(file,big);
byte[100] sub = big + 200;
// C-style code ends
我知道这在 Java 中是不可能的,我想到了两种解决方法,包括:
要么将 big 的一部分复制到 sub 中,然后遍历 big。
或者编写自己的类,该类将引用 big + offset + size 并通过使用 big 作为实际底层的访问器方法实现“子数组”数据结构。
我要解决的任务是将文件加载到内存中,然后通过类获得对存储在文件中的记录的只读访问权限。速度是最重要的,因此理想情况下我想避免复制或访问方法。由于我正在学习 Java,所以我想坚持下去。
我还有其他选择吗?如果我没有很好地解释任务,请提出问题。
最佳答案
创建一个数组作为另一个数组的“ View ”在 Java 中是不可能的。但是你可以使用 java.nio.ByteBuffer ,这基本上是您在解决方法 #2 中建议的类(class)。例如:
ByteBuffer subBuf = ByteBuffer.wrap(big, 200, 100).slice().asReadOnlyBuffer();
不涉及复制(尽管有一些对象创建)。作为标准库类,我还假设 ByteBuffer 更有可能获得特殊待遇。 JVM 的“JIT”优化比自定义的优化。
关于java - 在 Java 中 : is where a way to create a subarray that will point to a portion of a bigger array?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/618396/