Java Bytebuffer 只能顺序读取?

Posted

技术标签:

【中文标题】Java Bytebuffer 只能顺序读取?【英文标题】:Java Bytebuffer can only read sequentially? 【发布时间】:2019-06-05 08:56:44 【问题描述】:

我正在将文件映射到内存并使用 java 的 ByteBuffer 将其读回。这被证明是一种非常快速的读取大文件的方法。但是,我只能按顺序读取这些值。这意味着一旦我读到它们buffer.getInt()缓冲区指针移动到下一个字节。所以如果我想多次使用一个值,我必须将它存储到另一个变量中:

int a = buffer.getInt()

我注意到,与仅读取字节相比,这种将一段内存复制到另一个内存的方法需要很长时间(尤其是对于非常大的文件)。有没有办法我可以重新读取这些字节而不是复制它们?

【问题讨论】:

【参考方案1】:

只需使用 position(int) 在 ByteBuffer 中查找。然后你可以在任何地方阅读。

ByteBuffer buffer=ByteBuffer.allocate(1000);
byte[] data=new byte[10];
buffer.position(100);
//read 10 from postion 100
buffer.get(data);

【讨论】:

以上是关于Java Bytebuffer 只能顺序读取?的主要内容,如果未能解决你的问题,请参考以下文章

Netty——ByteBuffer的内部结构

Netty——ByteBuffer的内部结构

在 Java 中原子读取然后写入部分 ByteBuffer

Java使用ByteBuffer读取大文件

如何在本机中写入/读取直接 ByteBuffer?

将 Java 位图打包到 ByteBuffer 中 - 字节顺序与像素格式和字节序不匹配(ARM)