4

ファイルを開き、別の関数に渡してデータを書き込むメソッドが 1 つあります。2 番目の方法では、PrintWriter を使用してデータを書き込みます。ただし、誰もが PrintWriter を使用してそのストリームに書き込む必要はありませんでした。

現在、これは次のようになっています(サニタイズされた例...メソッドまたは変数名の選択を批判しないでください)

public void exportRawDataIntoStream(OutputStream os) {
    PrintWriter pr = new PrintWriter(os);
    printFirstData(pr);
    printSecondData(pr);
}

public void exportToFile(File file) {
    OutputStream os = null;
    try {
        os = new BufferedOutputStream(new FileOutputStream(file));
        exportRawDataIntoStream(os);
                doMoreWithTimeFile(os);
    } finally {
        if (os != null) {
            try {
                os.close();
            } catch (Exception e ) {
                e.printStackTrace();
            }
        }
    }
}

exportRawDataIntoStream の最後に「pr.flush」を配置しない限り、これは機能しません。ストリーム全体が閉じられるため、PrintWriter を閉じることができません。

フラッシュを行うことは正当で信頼できますか? 同じストリームでライターを混在させるために使用する必要がある他のアプローチはありますか、それとも絶対にしないでください。

4

1 に答える 1

5

はい、フラッシュは信頼できるはずです。その基本的な役割は、余分なデータを「プッシュ」することです。

ただし、公平を期すために、それは基本的なライターでのみ機能します。心に留めておいてください、それがすべてではないにしても、それらのほとんどだと思います。

しかし、何らかの工夫された特別な種類のライターを考えてみましょう。クローズ時に「何か他のことをする」何か。暗号化または圧縮ストリームのように。

たとえば、「base64 エンコーダー ライター」があり、それが完了するまで潜在的に末尾の「==」を安全に書き込むことができず、それはフラッシュではなくクローズです。

ただし、PrintWriter の場合は、問題にはならないはずです。

于 2009-06-26T00:24:50.943 に答える