您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

写入大文件时,FileOutputStream.close确实很慢

写入大文件时,FileOutputStream.close确实很慢

根据操作系统的不同,flush()仅需强制将数据写入操作系统即可。对于FileOutputStream,write()将所有数据传递给OS,因此flush()不会执行任何操作。凡为close()能确保文件实际写入到磁盘(或不依赖于操作系统而定)。您可以在写入数据时查看磁盘是否仍然繁忙。

500 MB的文件耗时30秒,表示您正在写入17 MB / s。这听起来像磁盘非常慢,或者网络共享/驱动器中的文件

你可以试试这个

File file = File.createTempFile("deleteme", "dat"); // put your file here.
FileOutputStream fos = new FileOutputStream(file);
long start = System.nanoTime();
byte[] bytes = new byte[32 * 1024];
for (long l = 0; l < 500 * 1000 * 1000; l += bytes.length)
    fos.write(bytes);
long mid = System.nanoTime();
System.out.printf("Took %.3f seconds to write %,d bytes%n", (mid - start) / 1e9, file.length());
fos.close();
long end = System.nanoTime();
System.out.printf("Took %.3f seconds to close%n", (end - mid) / 1e9);

版画

Took 0.116 seconds to write 500,006,912 bytes
Took 0.002 seconds to close

从速度上您可以看到,即使在关闭状态下,该系统也无法写入数据。即驱动器不是那么快。

其他 2022/1/1 18:19:34 有614人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶