我一直在尝试编写一些必须执行大量 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。
我应该把所有东西都包起来吗?或者我应该把所有东西都写一遍?