为什么 BufferedWriter 将数据部分写入文件?
Why BufferedWriter is writing the data into the file partially?
我正在尝试使用以下代码编写 json 文件:
File f = new File("words_3.json");
if (!f.exists()) {
f.createNewFile();
}
if (fileWriter == null)
fileWriter = new BufferedWriter(new FileWriter(f));
while (scanner.hasNext()) {
String text = scanner.nextLine();
fileWriter.append(text);
System.out.println("writing : "+text);
}
语句System.out.println()
显示终端中的所有文本。
当我检查输出文件时,我看到只写了 1300
行,而有超过 2000
行可用。
您正在写入输出流的数据不能保证立即到达目的地。
BufferedWritter
是一个 so-called high-level 流 它装饰了处理特定数据目的地的基础流,例如 FileWriter
(并且它们之间可能有更多的流)通过缓冲文本输出并提供 convince-method newLine()
.
BufferedWritter
维护一个缓冲区(一个字符数组),默认大小为8192
。当它 变满 时,它会将其分发给底层 low-level 流 。在这种情况下,对于 FileWriter
,它将负责将 个字符 编码为 个字节 。
完成后,JVM 将通过 FileOutputStream
(因为在底层字符流是建立在字节流之上的).
因此,写入缓冲区的数据将出现在文件中的块中:
- 当缓冲区 满;
- 并且在 流 关闭后 .
Javadoc 对于方法 close()
说:
Closes the stream, flushing it first.
即在释放资源之前 close()
调用方法 flush()
强制将缓存的数据传递到其目的地。
如果没有异常发生,写入流的所有内容都保证在流关闭时到达目的地。
您也可以在代码中使用 flush()
。但它必须非常谨慎地应用。可能当你处理大量关键数据并且有用时,即使部分写入(所以在异常的情况下你会丢失更少的信息).滥用 flush()
会显着降低性能。
我正在尝试使用以下代码编写 json 文件:
File f = new File("words_3.json");
if (!f.exists()) {
f.createNewFile();
}
if (fileWriter == null)
fileWriter = new BufferedWriter(new FileWriter(f));
while (scanner.hasNext()) {
String text = scanner.nextLine();
fileWriter.append(text);
System.out.println("writing : "+text);
}
语句System.out.println()
显示终端中的所有文本。
当我检查输出文件时,我看到只写了 1300
行,而有超过 2000
行可用。
您正在写入输出流的数据不能保证立即到达目的地。
BufferedWritter
是一个 so-called high-level 流 它装饰了处理特定数据目的地的基础流,例如 FileWriter
(并且它们之间可能有更多的流)通过缓冲文本输出并提供 convince-method newLine()
.
BufferedWritter
维护一个缓冲区(一个字符数组),默认大小为8192
。当它 变满 时,它会将其分发给底层 low-level 流 。在这种情况下,对于 FileWriter
,它将负责将 个字符 编码为 个字节 。
完成后,JVM 将通过 FileOutputStream
(因为在底层字符流是建立在字节流之上的).
因此,写入缓冲区的数据将出现在文件中的块中:
- 当缓冲区 满;
- 并且在 流 关闭后 .
Javadoc 对于方法 close()
说:
Closes the stream, flushing it first.
即在释放资源之前 close()
调用方法 flush()
强制将缓存的数据传递到其目的地。
如果没有异常发生,写入流的所有内容都保证在流关闭时到达目的地。
您也可以在代码中使用 flush()
。但它必须非常谨慎地应用。可能当你处理大量关键数据并且有用时,即使部分写入(所以在异常的情况下你会丢失更少的信息).滥用 flush()
会显着降低性能。