PrintWriter自动刷新令人困惑的逻辑
公共PrintWriter(OutputStream out,boolean
autoFlush):
out - An output stream
autoFlush - A boolean; if true, the println, printf, or format methods
will flush the output buffer
公共PrintStream(OutputStream out,boolean
autoFlush):
out - The output stream to which values and objects will be printed
autoFlush - A boolean; if true, the output buffer will be flushed
whenever a byte array is written, one of the println methods is invoked,
or a newline character or byte ('\n') is written
回答:
我认为答案就在于Java的历史。三人InputStream
,OutputStream
并PrintStream
在java.io
日期回Java
1.0。在此之前,该语言已经内置了对文件编码和字符集的严重支持。
引用Javadoc:
“
PrintStream为另一个输出流增加了功能,即能够方便地打印各种数据值的表示的能力。还提供了另外两个功能。与其他输出流不同,PrintStream从不抛出IOException;相反,特殊情况下仅设置内部可以通过checkError方法测试的标志…”
总而言之,这是在较低级别IO之上移植文本输出的一种便利。
在Java
1.1中Reader
,Writer
并PrintWriter
引入了。这些都支持字符集。尽管InputStream
并且OutputStream
仍然具有实际用途(原始数据处理),PrintStream
但相关性已不那么重要了,因为本质上的打印是关于文本的。
Javadoc PrintWriter
明确指出:
与PrintStream类不同,如果启用了自动刷新,则仅当调用println()方法之一时才执行此操作,而不是每当碰巧输出换行符时才执行。println()方法使用平台自己的行分隔符概念,而不是换行符。
换句话说,PrintWriter应该仅通过print*(...)
API使用,因为编写换行符等不应该是调用者的责任,处理文件编码和字符集的方式也不是调用者的责任。
我认为PrintWriter
应该java.io.Printer
改为,而不应该扩大Writer
。我不知道他们是否扩展为模仿对象PrintStream
,还是因为他们坚持维护管道设计习惯。
以上是 PrintWriter自动刷新令人困惑的逻辑 的全部内容, 来源链接: utcz.com/qa/410428.html