ファイルを開き、別の関数に渡してデータを書き込むメソッドがあります。その2番目のメソッドは、PrintWriterを使用してデータを書きたいと考えています。しかし、誰もがそのストリームに書き込むためにPrintWriterを使用する必要はありませんでした。私は「pr.flushを入れない限り、JavaのOutputStreamでライターを切り替える
現在それが、これは動作しません
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の最後にあります。私はPrintWriterを閉じることができません。これはストリーム全体を閉じるためです。
フラッシュは正統で信頼できるものですか? Writerを同じストリームに混在させるために使用すべき他のアプローチがありますか、それとも決してそれを行うべきではありませんか?
他のストリームをラップするWritersとOutputStreamの実装は、close()が実際に基本ストリームを閉じるかどうかによって異なります。場合によっては、基になるストリームが閉じられないことがわかっている場合は、close()を呼び出すことができます。 – JimN
圧縮ストリームのようなものは、通常、下にあるストリームを閉じることなく出力を処理するためのfinish()メソッドなどを持っています。 –
そうです、それはいつも混乱の点でした。 「クローズ」はチェーン全体を閉じることになっていると私は理解していますが、あなたが言うように、あるものはそうするものもあればそうでないものもあります。 –