Yanıtlar:
Gönderen dokümanlar arasında flush
yöntemiyle:
Çıktı akışını temizler ve tamponlanmış çıktı baytlarının yazılmasını zorlar. Genel temizleme sözleşmesi, onu çağırmanın, daha önce yazılmış baytların çıktı akışının uygulanmasıyla tamponlanmış olması durumunda, bu tür baytların derhal amaçlanan hedeflerine yazılması gerektiğinin bir göstergesidir.
Arabelleğe alma, esas olarak G / Ç performansını iyileştirmek için yapılır. Bununla ilgili daha fazla bilgiyi bu makaleden okuyabilirsiniz: Java I / O Performansını Ayarlama .
Herhangi bir komut verdiğimizde, bu komutun akışları, bilgisayarımızda tampon adı verilen bellek konumunda (geçici bir bellek konumu) saklanır. Tüm geçici bellek konumu dolduğunda, tüm veri akışlarını temizleyen ve bunları tamamen çalıştıran ve tampon geçici konumunda yeni akışlara yeni bir alan veren flush () kullanıyoruz. -Umarım anlayacaksın
BufferedOutputStream
, BufferedWriter
, ObjectOutputStream,
ve PrintXXX
sınıflar. flush()
Başka akışının yöntemi veya Writer
hiçbir şey yapmaz.
flush()
a için açıkça çağırmaya gerek yoktur . kendi başına bir floş çalıştırır. BufferedWriter
close()
close()
close()
Çağrıları not edin flush()
, bu nedenle FileWriter
ara bellek olmadan kullanıldığında her ikisinin de çağrılması gereksizdir .
Bir akışa veri yazdığınızda, hemen yazılmaz ve arabelleğe alınır. Kullanım Yani flush()
emin tampon gelen tüm verileriniz yazılı olduğu olmanız gerektiğinde.
Akışı kapatmadan önce tüm yazma işlemlerinin tamamlandığından emin olmalıyız ve bu yüzden flush()
dosya / tamponlu yazıcılarda çağrılır close()
.
Ancak, akışı kapatmadan önce tüm yazılarınızın istediğiniz zaman kaydedilmesi şartınız varsa kullanın flush()
.
FilterOutputStream
ve FilterWriter
.
Arabellek doluysa, arabelleğe alınan tüm dizeler diske kaydedilecektir. Tamponlar, Büyük Fırsatlardan kaçınmak için kullanılır! ve genel gider.
Java kitaplarına yerleştirilen BufferedWriter sınıfında, aşağıdaki gibi bir satır vardır:
private static int defaultCharBufferSize = 8192;
Arabellek dolmadan önce veri göndermek istiyorsanız, kontrol sizdedir. Sadece Yıkayın. Writer.flush () 'a yapılan çağrılar, "arabellekte ne varsa hemen gönder!
referans kitabı: https://www.amazon.com/Head-First-Java-Kathy-Sierra/dp/0596009208
sayfalar: 453
Akışlara genellikle içeriklerini periyodik olarak boşaltan ve örneğin ekranda görüntüleyen, bir sokete gönderen veya bir dosyaya yazan diziler tarafından erişilir. Bu, performans nedenleriyle yapılır. Bir çıktı akışını temizlemek, durdurmak istediğiniz, akış içeriğinin hedefine tamamen aktarılmasını beklediğiniz ve ardından akış boş ve içerik gönderilerek yürütmeye devam ettiğiniz anlamına gelir.
Performans sorunu için ilk veri Buffer'a yazılmalıdır. Tampon dolduğunda veriler çıktıya yazılır (Dosya, konsol vb.). Arabellek kısmen doldurulduğunda ve çıktıya (dosya, konsol) göndermek istediğinizde, çıktıya (dosya, konsol) kısmen doldurulmuş arabelleği yazmak için flush () yöntemini manuel olarak çağırmanız gerekir.