をフラッシュするとき、私はしてFileWriterをラップBufferedWriterのを持っている、と私は(書き込みを呼び出して)多くの多くの回...結果のファイルはかなり大きいです...Javaプログラム(Javaの1.5)でBufferedWriterの
このファイルの行のうち、いくつかは不完全です...
私は何か書きます(しかし、それは非効率だと思われます)か、別の方法のBufferedWriterを使うか、別のクラスを使用する必要があります...?
(私は書くために何百もの行を書きましたので、かなり効率的なものを作りたいと思っています) 理想的な "フラッシング"の瞬間は何でしょうか? (私はBufferedWriterの容量に達したとき)...
INIT:
try {
analysisOutput = new BufferedWriter(new FileWriter(
"analysisResults", true));
analysisOutput.newLine();
analysisOutput.write("Processing File " + fileName + "\n");
}
catch (FileNotFoundException ex) {
ex.printStackTrace();
}
catch (IOException ex) {
ex.printStackTrace();
}
執筆:
private void printAfterInfo(String toBeMoved,HashMap<String, Boolean> afterMap, Location location)
throws IOException {
if(afterMap != null) {
for (Map.Entry<String, Boolean> map : afterMap.entrySet()) {
if (toBeMoved == "Condition") {
if (1 <= DEBUG)
System.out.println("###" + toBeMoved + " " + location + " "
+ conditionalDefs.get(conditionalDefs.size() - 1)
+ " After " + map.getKey() + " "
+ map.getValue() + "\n");
analysisOutput.write("###" + toBeMoved + " " + location + " "
+ conditionalDefs.get(conditionalDefs.size() - 1)
+ " After " + map.getKey() + " " + map.getValue()
+ "\n");
} else {
if (1 <= DEBUG)
System.out.println("###" + toBeMoved + " " + location + " "
+ map.getKey() + " After "
+ map.getValue() + "\n");
if (conditionalDefs.size() > 0)
analysisOutput.write("###" + toBeMoved + " " + location + " "
+ conditionalDefs.get(conditionalDefs.size() - 1) + " "
+ map.getKey() + " After " + map.getValue()
+ "\n");
else
analysisOutput.write("###" + toBeMoved + " " + location + " " + map.getKey() + " After " + map.getValue() + "\n");
}
}
}
私は不完全である行がちょうどそれらであることを考え出しました「処理ファイル」の前に...分析する1つのファイルから別のファイルに切り替えるときに発生する...
終了:
dispatch(unit);
try {
if (analysisOutput != null) {
printFileInfo();
analysisOutput.close();
}
}
catch (IOException ex) {
ex.printStackTrace();
}
時々printFileInfoでプリントアウトした情報が結果ファイルには表示されません...
不完全ですが、複数のスレッドに書き込んでいますか? IIRC BufferedWriterはスレッドセーフではありませんので説明になるかもしれませんが、より多くのスペースを確保するために「手動でフラッシュする」必要はありません。 –
質問がよく分からない場合は、明らかになるコードサンプルまたは出力サンプルを用意してください。 –
実際にはスレッドセーフです(Writerデコレータはどのオブジェクトをロックするかについて合意することに問題があります)。 –