out.flush()は本当に役に立ちましたか?


java.ioパッケージのoutputStreamにはメソッドがあります.
    public void flush() throws IOException {
    }

Javaの勉強を始めたばかりの頃、outputStreamを使い終わった後、flushを先にしてcloseを使うのはなぜか覚えています.
このjvmを実行すると、システムリフレッシュシステムの出力バッファを呼び出すのに役立つと思っていました.そこでテストしてみました.
@Test
    public void tests() throws IOException {
        InputStream inputStream=new FileInputStream("E:/test/te.txt");
        FileOutputStream outputStream=new FileOutputStream("E:/test/te2.txt");
        BufferedOutputStream bufferedOutputStream=new BufferedOutputStream(outputStream);
        int len;
        //8192  buffoutpuStream  
        byte[] b=new byte[8192];
        while ((len=inputStream.read(b))!=-1){
            bufferedOutputStream.write(b,0,len);
            //bufferedOutputStream.flush();
            outputStream.flush();
        }

    }

私はここにいるflush();ここでブレークポイントを打って、ここまで実行して、まずこの文を実行していません.ファイルは作成されましたが、何もありません.これはbuffoutputStreamに書かれたbuffの中に書かれていることが分かります.私が次のステップを実行した後、つまりflush()を実行して、もう一度見に行きましたか、それともありませんか.私が考えすぎたことを説明して、何も実行していません.
   public synchronized void flush() throws IOException {
        flushBuffer();
        out.flush();
    }

ここにエピソードがあります.私はbufferedOutputStreamを実行しています.flush();の場合は可能です.ソースコードを見てみると、flushBuffer()が呼び出されているので、本当に役に立つのはflushBuffer()です.
  private void flushBuffer() throws IOException {
  // count  buff  
        if (count > 0) {
            out.write(buf, 0, count);
            count = 0;
        }
    }

ここではfileoutpuStreamを呼び出したwrite()です.ここでwriteは、ディスクへの書き込みを実現するために呼び出されたローカルメソッドです.
private native void write(int b, boolean append) throws IOException;

本当に役に立つのは、ディスクに書き込まれたwrite.まとめ:flush()を書き換える特別な処理がないと役に立たない、例えばOutputStreamのfileOutputStreamを引き継いだだけである.したがって、この2つのクラスのオブジェクトがflush()を呼び出すと意味がありません.