MappedByteBuffer 如何关闭文件流
当 buff 变化的话, 就需要clean一次
File file = new File("xxx");
RandomAccessFile acf = new RandomAccessFile(file, "r");
FileChannel fc = acf.getChannel();
MappedByteBuffer mbuf = fc.map(FileChannel.MapMode.READ_ONLY, 0, 1024);
Cleaner cleaner = ((sun.nio.ch.DirectBuffer) mbuf).cleaner();
if (cleaner != null) {
cleaner.clean();
}
mbuf = fc.map(FileChannel.MapMode.READ_ONLY, 1024, 1024);
Cleaner cleaner = ((sun.nio.ch.DirectBuffer) mbuf).cleaner();
if (cleaner != null) {
cleaner.clean();
}
// ....
//当mbuf每次映射到其他内存之后,都需要被清理掉,不然程序开着会一直手动删除不掉文件
acf.close();
fc.close();