В зависимости от ОС, flush()
не делает ничего больше, чем принудительно записывает данные в ОС. В случае FileOutputStream write () передает все данные в ОС, поэтому flush () ничего не делает. Где close()
может гарантировать, что файл фактически записан на диск (или не зависит от ОС). Вы можете посмотреть, занят ли диск при записи данных.
500 МБ файлов, занимающих 30 секунд, означают, что вы пишете 17 МБ / с. Это звучит как очень медленный диск или файл на общем сетевом ресурсе / диске.
Вы можете попробовать это
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
Из скорости видно, что в этой системе данные не записываются даже при закрытии. то есть диск не такой быстрый.