【发布时间】:2021-02-23 05:59:07
【问题描述】:
由于PrintWriter 被缓冲,我们需要刷新其数据或使用autoflush(布尔参数)。如果我们不这样做,我们的数据将仅在整个缓冲区满时才被写入。
我们可以这样做:
PrintWriter pw = new PrintWriter (new FileWriter ("test.txt"));
pw.println ("hello");
pw.flush ();
或者像这样使用 autoflush:
PrintWriter pw = new PrintWriter (new FileWriter ("test.txt"),true);
pw.println ("hello");
我的问题如下:为什么如果我直接用PrintWriter 写入file,autoflushing 没有这样的选项?所以如果我这样做,它不会编译:
PrintWriter pw1 = new PrintWriter ("test.txt",true);
//'Cannot resolve constructor 'PrintWriter(java.lang.String, boolean)'
pw1.println ("hey");
为什么我们没有提供这种类型的构造函数?有什么我想念的吗?如果我直接写入 file,我必须手动使用 flush() 方法,而 autoflush 不存在。很奇怪,不是吗?
【问题讨论】:
-
如果您使用File 参数,也不会自动刷新。如果你觉得这很奇怪,那你的奇怪标准是极低的。
-
这条评论真的能帮助我理解我的问题吗?
-
我认为归结为一个问题:API 应该提供所有可能的用例还是应该包含最重要的用例(这意味着有时您必须自己实现很少使用的功能)跨度>
-
关闭前的 Flsuh 总是多余的。如果流没有被缓冲,它什么也不做,如果是,
close()调用flush()。有关编程语言“缺失”功能的问题应向设计人员提出。您在这里得到的只是或多或少不知情的猜测。
标签: java buffer iostream flush printwriter