如何解决当我直接写入文件时,为什么在PrintWriter中没有自动刷新参数?
由于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
直接写入文件,为什么没有 autoflushing 这样的选项?因此,如果我这样做,它将无法编译:
PrintWriter pw1 = new PrintWriter ("test.txt",true);
//'Cannot resolve constructor 'PrintWriter(java.lang.String,boolean)'
pw1.println ("hey");
为什么我们没有提供这种类型的构造函数?我有什么想念的吗?如果我直接写入文件,则必须在flush()
不存在的情况下手动使用autoflush
方法。很奇怪,不是吗?
解决方法
不,这不是特别奇怪。 API充满差异,原因从non-obvious到non-obvious到unknown不等。
由于刷新速度很慢,所以几乎没有理由为什么要在每一行之后显式刷新(例如,正在写入的文件tail -f
,缓冲区很大但打印量很低,因此需要很长时间)缓冲区填满并显示结果的时间)。由于在Java 5中添加了这些构造函数(String
和File
,因此即使刷新了与其他构造函数(自Java 1.1开始)的一致性,自动刷新也很可能被省略了。 / p>
当缓冲区已满并且关闭写入器时,将发生刷新。对于正是您想要的文件。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。