在Java中:在哪里可以创建指向更大阵列的一部分的子阵列?[英] In Java: is where a way to create a subarray that will point to a portion of a bigger array?

问题描述

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

byte[] big  = new byte[1000];

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

byte[100] sub = big + 200; 

// C-style code ends

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

  1. 将 big 的部分复制到 sub 中,遍历 big.

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

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

我还有其他选择吗?如果我没有很好地解释任务,请提出问题.

推荐答案

在 Java 中不可能创建一个数组作为另一个数组的"视图".但是你可以使用 java.nio.ByteBuffer,这基本上是您在解决方法#2 中建议的类.例如:

ByteBuffer subBuf = ByteBuffer.wrap(big, 200, 100).slice().asReadOnlyBuffer();

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

本文地址:https://www.itbaoku.cn/post/978801.html