In einem Java-Programm (Java 1.5) zu spülen, habe ich eine BufferedWriter, die einen Filewriter Wraps, und ich rufe write() viele, viele Male ... Die resultierende Datei ist ziemlich groß ...Wenn ein BufferedWriter
Unter den Zeilen dieser Datei sind einige davon unvollständig ...
Muss ich Flush jedes Mal aufrufen, wenn ich etwas schreibe (aber ich vermute, es wäre ineffizient) oder eine andere Methode von BufferedWriter verwenden oder eine andere Klasse verwenden ...?
(Da ich eine zillion Zeilen zu schreiben habe, möchte ich etwas ziemlich effizient haben.) Was wäre der ideale "Spülung" Moment? (Wenn ich erreichen, die Kapazität des 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();
}
Schreiben:
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");
}
}
}
Ich habe gerade herausgefunden, dass die Linien, die unvollständig sind, sind die, die gerade vor „Verarbeitungsdatei“ ... so kommt es, wenn ich von einer Datei bin Schale, dass ich zu einem anderen zu analysieren ...
Schliessung:
dispatch(unit);
try {
if (analysisOutput != null) {
printFileInfo();
analysisOutput.close();
}
}
catch (IOException ex) {
ex.printStackTrace();
}
Manchmal sind die Informationen, die von printFileInfo ausgedruckt erscheint nicht in der Ergebnisdatei ...
sind unvollständig, haben Sie mehrere Threads schreiben? IIRC a BufferedWriter ist NICHT threadsicher, das könnte eine Erklärung sein, aber es muss NICHT "manuell gespült" werden, um mehr Platz zu schaffen, es kümmert sich darum. –
Wenn Sie nicht sicher sind, ob Ihre Frage klar ist, geben Sie vielleicht ein Codebeispiel oder ein Ausgabeprobe an, das verdeutlicht. –
Es ist tatsächlich Thread-sicher (obwohl Writer-Dekoratoren Probleme haben, sich darüber zu einigen, welches Objekt zu sperren ist). –