Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 当我直接写入文件时,为什么PrintWriter中没有自动刷新参数?_Java_Buffer_Iostream_Flush_Printwriter - Fatal编程技术网

Java 当我直接写入文件时,为什么PrintWriter中没有自动刷新参数?

Java 当我直接写入文件时,为什么PrintWriter中没有自动刷新参数?,java,buffer,iostream,flush,printwriter,Java,Buffer,Iostream,Flush,Printwriter,由于PrintWriter是缓冲的,我们需要刷新它的数据或使用autoflush(布尔参数)。如果我们不这样做,我们的数据将只在整个缓冲区满时写入 我们可以这样做: PrintWriter pw = new PrintWriter (new FileWriter ("test.txt")); pw.println ("hello"); pw.flush (); PrintWriter pw = new PrintWrite

由于
PrintWriter
是缓冲的,我们需要刷新它的数据或使用autoflush(布尔参数)。如果我们不这样做,我们的数据将只在整个缓冲区满时写入

我们可以这样做:

PrintWriter pw = new PrintWriter (new FileWriter ("test.txt"));
        pw.println ("hello");
        pw.flush ();
PrintWriter pw = new PrintWriter (new FileWriter ("test.txt"),true);
        pw.println ("hello");
或者像这样使用自动刷新:

PrintWriter pw = new PrintWriter (new FileWriter ("test.txt"));
        pw.println ("hello");
        pw.flush ();
PrintWriter pw = new PrintWriter (new FileWriter ("test.txt"),true);
        pw.println ("hello");
我的问题如下:为什么如果我直接用
PrintWriter
写入文件,就没有这样的自动刷新选项?因此,如果我这样做,它将不会编译:

PrintWriter pw1 = new PrintWriter ("test.txt",true); 
//'Cannot resolve constructor 'PrintWriter(java.lang.String, boolean)'
        pw1.println ("hey");

为什么我们没有提供这种类型的构造函数?我有什么遗漏吗?如果我直接写入文件,我必须手动使用
flush()
方法,而
autoflush
不存在。奇怪,不是吗?

不,不是特别奇怪。API中充满了差异,原因各不相同

由于刷新速度很慢,因此很少有理由希望在每一行之后显式刷新(例如,正在写入的文件的
tail-f
,缓冲区大,但打印量低,因此需要很长时间才能填充缓冲区并显示结果)。由于这些构造函数(
String
File
)是在Java5中添加的,因此autoflush很可能被认为是不必要的,尽管它破坏了与其他构造函数(自Java1.1以来)的一致性


当缓冲区已满且写入程序关闭时,会发生刷新。对于文件,这正是您想要的。

不,这并不特别奇怪。API中充满了差异,原因各不相同

由于刷新速度很慢,因此很少有理由希望在每一行之后显式刷新(例如,正在写入的文件的
tail-f
,缓冲区大,但打印量低,因此需要很长时间才能填充缓冲区并显示结果)。由于这些构造函数(
String
File
)是在Java5中添加的,因此autoflush很可能被认为是不必要的,尽管它破坏了与其他构造函数(自Java1.1以来)的一致性


当缓冲区已满且写入程序关闭时,会发生刷新。对于文件,这正是您想要的。

如果使用参数,也不会自动刷新。如果你认为这很奇怪,那么你的古怪标准是非常低的。这个评论真的能帮助我理解我的问题吗?我认为它归结为一个问题:API应该提供所有可能的用例还是应该包括最重要的用例(这意味着有时您必须自己实现很少使用的功能)关闭前的Flsuh总是冗余的。如果流没有缓冲,它什么也不做,如果是,则
close()
调用
flush()
。关于编程语言中“缺失”功能的问题应该向设计师提出。你在这里得到的只是或多或少的不知情猜测。如果你使用参数也不会自动刷新。如果你认为这很奇怪,你的古怪标准非常低。这条评论真的能帮助我理解m吗y问题?我认为这可以归结为一个问题:API应该提供所有可能的用例,还是应该包括最重要的用例(这意味着有时你必须自己实现很少使用的功能)Flsuh在关闭之前总是冗余的。如果流没有缓冲,它什么都不做,如果是,
close()
调用
flush()
。有关编程语言中“缺少”功能的问题应向设计人员提出。您在这里得到的只是或多或少不知情的猜测。