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();