学习Java,请温柔.理想情况下,我需要创建一个字节数组,指向更大数组的一部分:
byte[] big = new byte[1000]; // C-style code starts load(file,big); byte[100] sub = big + 200; // C-style code ends
我知道这在Java中是不可能的,并且有两种解决方法可以想到并包括:
要么通过大的复制部分大到子迭代.
或者编写自己的类,它将引用big + offset + size并通过使用big作为实际底层数据结构的访问器方法实现"子阵列" .
我试图解决的任务是将文件加载到内存中,然后获取对通过类存储文件的记录的只读访问权限.速度是最重要的,因此理想情况下我想避免复制或访问方法.因为我正在学习Java,所以我想坚持下去.
我还有其他选择吗?如果我没有充分解释这项任务,请提出问题.
在Java中,不可能将数组创建为其他数组的"视图".但是你可以使用java.nio.ByteBuffer,它基本上就是你在解决方案#2中建议的类.例如:
ByteBuffer subBuf = ByteBuffer.wrap(big, 200, 100).slice().asReadOnlyBuffer();
不涉及复制(虽然创建了一些对象).作为一个标准的库类,我还假设ByteBuffer更有可能接受特殊处理.JVM的"JIT"优化比自定义优化.