ファイルの読み取りに MemoryMapped バッファを使用しています。最初にチャネル サイズを取得し、同じサイズを使用してファイルをメモリにマッピングします。ここでは、ファイルを最初からマッピングするため、初期位置は 0 です。次に、別の 400KB のデータがそのファイルに追加されます。今、私はその 400kb だけをマップしたいのですが、コードに何か問題があり、それを理解できず、これを取得しています
260java.io.IOException: Channel not open for writing - cannot extend file to required size
at sun.nio.ch.FileChannelImpl.map(FileChannelImpl.java:812)
at trailreader.main(trailreader.java:55
だからここに私のコードがあります
BufferedWriter bw;
FileInputStream fileinput = null;
try {
fileinput = new FileInputStream("simple.csv");
} catch (FileNotFoundException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
FileChannel channel = fileinput.getChannel();
MappedByteBuffer ByteBuffer;
try {
ByteBuffer = fileinput.getChannel().map(FileChannel.MapMode.READ_ONLY, 0, channel.size());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
/*
* Add some 400 bytes to simple.csv. outside of this program...
*/
//following line throw exception.
try {
ByteBuffer = fileinput.getChannel().map(FileChannel.MapMode.READ_ONLY, channel.size(), 400);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
したがって、私のコードでは、追加された追加データを再読み込みしようとしていますが、機能していません。prob は channel.size() であることがわかっていますが、修正できません。