私は、多くの 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() 関数でラップしたくありません。これにより速度が低下するのではないかと心配しているからです。そのため、私はすべての 2 つのバージョンを作成しました。1 つは byte[] を受け取り、もう 1 つは ByteBuffer を受け取ります。
私はすべてをラップする必要がありますか?それとも、すべて二重に書くべきですか?