gpt4 book ai didi

java - Java中的内存映射文件

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:31:33 24 4
gpt4 key购买 nike

我一直在尝试编写一些必须执行大量 I/O 的非常快速的 Java 代码。我正在使用返回 ByteBuffer 的内存映射文件:

public static ByteBuffer byteBufferForFile(String fname){
FileChannel vectorChannel;
ByteBuffer vector;
try {
vectorChannel = new FileInputStream(fname).getChannel();
} catch (FileNotFoundException e1) {
e1.printStackTrace();
return null;
}
try {
vector = vectorChannel.map(MapMode.READ_ONLY,0,vectorChannel.size());
} catch (IOException e) {
e.printStackTrace();
return null;
}
return vector;
}

我遇到的问题是 ByteBuffer .array() 方法(应该返回一个 byte[] 数组)不适用于只读文件。我想编写我的代码,以便它可以同时处理在内存中构造的内存缓冲区和从磁盘读取的缓冲区。但我不想将我所有的缓冲区包装成一个 ByteBuffer.wrap() 函数,因为我担心这会减慢速度。所以我一直在编写所有内容的两个版本,一个采用 byte[],另一个采用 ByteBuffer

我应该把所有东西都包装起来吗?还是我应该双写所有内容?

最佳答案

有没有人真正检查过由内存映射创建的 ByteBuffers 是否首先支持调用 .array(),而不考虑只读/读写?

据我所知,答案是ByteBuffer 通过 ByteBuffer.array() 返回直接 byte[] 数组的能力受 ByteBuffer 的存在控制.hb (byte[]),在创建 MappedByteBuffer 时始终设置为 null。

这对我来说有点糟糕,因为我希望做一些类似于问题作者想做的事情。

关于java - Java中的内存映射文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1023200/

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