Jawaban:
Dari docs dari flush
metode:
Mengosongkan aliran keluaran dan memaksa semua byte keluaran yang di-buffer untuk ditulis. Kontrak umum flush adalah bahwa memanggilnya merupakan indikasi bahwa, jika ada byte yang sebelumnya ditulis telah di-buffer oleh implementasi aliran keluaran, byte tersebut harus segera ditulis ke tujuan yang dimaksudkan.
Buffering terutama dilakukan untuk meningkatkan kinerja I / O. Lebih lanjut tentang ini dapat dibaca dari artikel ini: Tuning Java I / O Performance .
Ketika kami memberikan perintah apa pun, aliran perintah itu disimpan di lokasi memori yang disebut buffer (lokasi memori sementara) di komputer kami. Ketika semua lokasi memori sementara penuh maka kami menggunakan flush (), yang membersihkan semua aliran data dan mengeksekusinya sepenuhnya dan memberikan ruang baru untuk aliran baru di lokasi sementara buffer. -Harap Anda akan mengerti
BufferedOutputStream
, BufferedWriter
, ObjectOutputStream,
dan PrintXXX
kelas. The flush()
Metode dari setiap aliran lain atau Writer
tidak apa-apa.
flush()
secara eksplisit tidak diperlukan untuk BufferedWriter
, selama Anda close()
penulisnya. close()
menjalankan flush itu sendiri.
close()
panggilan flush()
, jadi memanggil keduanya berlebihan saat menggunakan FileWriter
tanpa buffer.
Saat Anda menulis data ke aliran, data tidak langsung ditulis, dan di-buffer. Jadi gunakan flush()
saat Anda perlu memastikan bahwa semua data Anda dari buffer ditulis.
Kita perlu memastikan bahwa semua penulisan telah selesai sebelum kita menutup aliran, dan itulah sebabnya flush()
disebut dalam file / buffered writer close()
.
Tetapi jika Anda memiliki persyaratan bahwa semua tulisan Anda disimpan kapan saja sebelum Anda menutup streaming, gunakan flush()
.
FilterOutputStream
dan FilterWriter
.
Jika buffer sudah penuh, semua string yang di-buffer di dalamnya, mereka akan disimpan ke disk. Buffer digunakan untuk menghindari Transaksi Besar! dan overhead.
Di kelas BufferedWriter yang ditempatkan di java libs, ada satu baris seperti:
private static int defaultCharBufferSize = 8192;
Jika Anda ingin mengirim data sebelum buffer penuh, Anda memiliki kendali. Siram Saja. Panggilan ke writer.flush () mengatakan, "kirim apa pun yang ada di buffer, sekarang!
buku referensi: https://www.amazon.com/Head-First-Java-Kathy-Sierra/dp/0596009208
halaman: 453
Stream sering diakses oleh utas yang secara berkala mengosongkan kontennya dan, misalnya, menampilkannya di layar, mengirimkannya ke soket, atau menuliskannya ke file. Ini dilakukan untuk alasan kinerja. Membilas aliran keluaran berarti Anda ingin berhenti, menunggu konten aliran sepenuhnya ditransfer ke tujuannya, lalu melanjutkan eksekusi dengan aliran kosong dan konten dikirim.
Untuk masalah kinerja, data pertama harus ditulis ke dalam Buffer. Ketika buffer penuh maka data ditulis ke output (File, konsol, dll.). Ketika buffer terisi sebagian dan Anda ingin mengirimkannya ke output (file, konsol) maka Anda perlu memanggil metode flush () secara manual untuk menulis buffer yang terisi sebagian ke output (file, konsol).