gpt4 book ai didi

Java.NIO InvalidIndexException - 如何随机访问大文件进行读写

转载 作者:太空宇宙 更新时间:2023-11-04 08:57:01 25 4
gpt4 key购买 nike

我围绕 java.io.RandomAccessFile(大小仅为 54 KB 的文件)创建了一个 java.nio.MappedByteBuffer。生成的 MappedByteBuffer 的“容量”和“限制”约为 12 KB,因此当我尝试调用 mybytebuffer.get(i > 13044)mybytebuffer.put(i > 13044, value) 时,它会抛出 InvalidIndexException

所有这些行为都记录在 Sun 的官方 javadocs 中。我的问题是如何使用 java.nio ByteBuffers 读取或写入文件中的任何位置(我需要随机访问)。我似乎找不到说明非顺序访问的 Java NIO 示例或文档。

最佳答案

MappedByteBuffer 可以随机访问文件...它是一个“直接字节缓冲区”。 (具体来说,它使用操作系统的虚拟内存子系统将文件映射到内存。)

您可以随机访问字节,如此处的代码片段所示:

public void doIt() throws FileNotFoundException, IOException {
File file = new File("myfile");
RandomAccessFile raf = new RandomAccessFile(file, "rw");
FileChannel fc = raf.getChannel();
MappedByteBuffer mbb = fc.map(MapMode.READ_WRITE, 0, file.length());

//get a random byte
byte b1 = mbb.get(SOME_RANDOM_BYTE);

//get another random byte
mbb.position(SOME_OTHER_BYTE_POSITION);
byte b2 = mbb.get();
}

您可以根据需要移动 MBB 并访问字节(读取和写入)。

关于Java.NIO InvalidIndexException - 如何随机访问大文件进行读写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2031939/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com