java - 在 Java 中 : is where a way to create a subarray that will point to a portion of a bigger array?

标签 java performance

学习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,所以我想坚持下去。

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

最佳答案

创建一个数组作为另一个数组的“ 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/

相关文章:

java - 泽西声明式链接不起作用

php - 用户限制 - 在数据库中还是直接到文件中? (灵活性与性能?)

mysql性能比较

java - 什么是存储整数对的 O(1) 搜索内存高效数据结构?

Java - 如何在找不到所有元素时添加第二个元素 Java Selenium

java - org.glassfish.jersey.internal.RuntimeDelegateImpl 未找到

java - 返回数组元素的长度

php - MySQL:节省空间/减少负载的最佳方式

php - 管理大型数据集

java - 对 Java8 Stream 性能感到困惑