Yanıtlar:
Gönderen dokümanlar arasında flushyö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 PrintXXXsınıflar. flush()Başka akışının yöntemi veya Writerhiçbir şey yapmaz.
flush()a için açıkça çağırmaya gerek yoktur . kendi başına bir floş çalıştırır. BufferedWriterclose()close()
close()Çağrıları not edin flush(), bu nedenle FileWriterara 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().
FilterOutputStreamve 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.