祝各位道友念头通达
GitHub Gitee 语雀 打赏

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();
posted @ 2022-03-11 22:13  韩若明瞳  阅读(385)  评论(0编辑  收藏  举报