gpt4 book ai didi

java - 为什么 fileWriter 在 bufferedWriter 和 printWriter 之前写入输出文件?

转载 作者:行者123 更新时间:2023-12-01 21:32:46 33 4
gpt4 key购买 nike

我正在尝试一些 Java.io 类,例如 FileFileWriterBufferedWriterPrintWriter

我不明白为什么 FileWrite .write() 方法总是在所有其他 bufferedWriter 和 printWriter 的 .write() 和/或 之前打印。 println() 方法。

try(FileWriter fileWriter = new FileWriter("file.res");
BufferedWriter bufferedWriter = new BufferedWriter(fileWriter);
PrintWriter printWriter = new PrintWriter(bufferedWriter)){

bufferedWriter.write("BufferedReader\n");

printWriter.println("PrintWriter");

fileWriter.write("FileWriter\n");

}catch (Exception e){
e.printStackTrace();
}

产生输出:

FileWriter
BufferedReader
PrintWriter

正常吗?为什么?

最佳答案

是的。

FileWriter 没有缓冲,因此写入它会立即写入磁盘。

BufferedWriter 首先写入缓冲区(在内存中)。 PrintWriter 本身没有缓冲,因此它会立即写入底层 BufferedWriter,因此也会写入内存。对于这两个,写入操作的顺序保持不变,因为它们以相同的顺序写入内存。

try-with-resources block 完成时,资源(Writers)将隐式关闭。在关闭之前,调用写入器的刷新方法,导致缓冲区的内容写入底层写入器 - FileWriter - 并因此写入磁盘。

所以执行顺序是

bufferedWriter.write("BufferedReader\n"); -> buf[0..n]
printWriter.println("PrintWriter"); -> buf[n+1...m]
fileWriter.write("FileWriter\n"); -> file[0..a]

//implicit close
bufferdWriter.close(); buf[0..m] -> file[a+1..a+m]

文件结果将如下所示

file[0..a,a+1..a+n,a+n+1..a+m]
^ ^ ^ ^ ^ ^
|FW| | BW | | PW |

关于java - 为什么 fileWriter 在 bufferedWriter 和 printWriter 之前写入输出文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37301521/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com