JDK1.8在Windows系统上MMap后文件IO关闭无效

前言

最近在开发个小东西,大量涉及了文件的操作。当然这种事情很简单嘛,最基本的打开个文件流进行写不就行了?

1
2
3
4
FileChannel fc = new RandomAccessFile(file, "rw").getChannel();
MappedByteBuffer mb = fc.map(FileChannel.MapMode.READ_WRITE, 0, 4096);
// ......
fc.close()

我本来也是这样想的,可是当你执行这条语句file.delete()的时候居然返回的是false,删除失败?why?我不是明明已经将文件流关闭了嘛?接下来就是疯狂找原因了。

阅读更多

FileChannel和MMAP的使用以及benchmark

前言

最近弄了一些小东西,发现它们都有个共同点:对文件的操作。无论是文件的快速写入又或者是大文件的读取等,都要求我们对文件IO有很深的了解。不同文件大小的读写操作,应该选择哪种方式能达到最快的效果?接下来我们看看Java中常见的文件操作方式以及它们在读写大文件时各自的效果。

阅读更多