Java最快字节数组文件写入+确保文件句柄被释放

时间:2017-01-14 16:03:07

标签: java nio

我需要为单个文件编写大小从1MB到2MB的字节数组。数据总是作为byte [](它被计算)分配,所以我不能使用FileChannel.transferTo。在写入之后,应该保证刷新到磁盘。

这是最快的解决方案吗?

FileChannel channel =  new RandomAccessFile(file, "rw").getChannel();
ByteBuffer buffer = channel.map(FileChannel.MapMode.READ_WRITE, 0, data.length);
buffer.put(data);
channel.force(false);
channel.close();

在我的测试套件中,我发现当我进行清理时,文件有时会被操作系统(或JVM)锁定(java.io.File.delete()返回false)。我担心资源没有被释放。人们建议使用System.gc()以及一些不安全的解决方案,但也许我的程序可能会达到最大限制?我应该担心吗?分配大量内存映射文件会有问题吗?它来自同一个线程,因此在打开新的之前它们将被关闭。我的程序也必须能够删除这些文件。

另请阅读How to unmap a file from memory mapped using FileChannel in java?

0 个答案:

没有答案