我正在学习java中的内存映射文件。 我想知道如何写/读到MappedByteBuffer。
这是我用于写入MappedByteBuffer的代码。
private static void write(String strFilePath) {
File fl = new File(strFilePath);
FileChannel fChannel = null;
RandomAccessFile rf = null;
MappedByteBuffer mBBuffer = null;
try {
rf = new RandomAccessFile(fl, "rw");
fChannel = rf.getChannel();
mBBuffer = fChannel.map(FileChannel.MapMode.READ_WRITE, 0, 1024 );
for(int i =0;i<10030;i++) {
if(i == mBBuffer.limit()) {
mBBuffer = fChannel.map(FileChannel.MapMode.READ_WRITE,i+1,1024);
}
mBBuffer.put((byte)'a');
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
if(fChannel != null) {
fChannel.close();
}
if(rf != null) {
rf.close();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
尝试执行此操作时出现BufferOverflow异常。
如果我不知道我将提前写入文件的内容大小,如何在写入时达到限制后增加MappedByteBuffer的大小?
为了阅读,让我们来看看这个案子, 我创建了一个具有初始缓冲区大小的MappedByteBuffer,如果到达该初始大小的末尾,我如何映射文件的不同部分
更一般地说,我有一个文件,从文件的一部分到另一部分有字节偏移,当我在点(x)读取偏移量(y)时,我想从(x)跳转到(y) )。我该怎么做?
先谢谢你帮助我。