В программе Java (Java 1.5), у меня есть BufferedWriter, что оборачивает в FileWriter, и я называю записи() много много раз ... Получившийся файл является довольно большой ...Когда промывать BufferedWriter
Среди строк этого файла некоторые из них неполные ...
Нужно ли мне называть flush каждый раз, когда я что-то пишу (но я подозреваю, что это будет неэффективно) или использовать другой метод 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");
}
}
}
Я просто понял, что линии, которые являются неполными являются только перед «Обработка файла» ... так происходит, когда я переключаюсь с одного файла, который я анализирую на другой ...
Закрытие:
dispatch(unit);
try {
if (analysisOutput != null) {
printFileInfo();
analysisOutput.close();
}
}
catch (IOException ex) {
ex.printStackTrace();
}
Иногда информация распечатывается printFileInfo не появляется в файле результатов ...
Если некоторые являются неполными, у вас есть несколько потоков, пишущих на него? IIRC BufferedWriter НЕ является потокобезопасным, поэтому это может быть объяснением, но его НЕ нужно «ругать вручную», чтобы сделать больше места, он сам позаботится об этом. –
Если вы не уверены, что ваш вопрос ясен, возможно, укажите образец кода или образец вывода, который разъясняет. –
На самом деле это поточно-безопасный (хотя у декораторов Writer есть проблемы с соглашением о том, какой объект заблокировать). –