分析JAVA打印流的自动刷新

参考:https://blog.csdn.net/xshsjl/article/details/77076235
参考:https://blog.csdn.net/weixin_43369921/article/details/111397253

今天遇到了一个奇怪的事情,使用打印流,有一个自动刷新的参数,但设不设置结果貌似没啥影响,下面来研究研究

public PrintStream(OutputStream out, boolean autoFlush)
public PrintWriter(OutputStream out/Writer, boolean autoFlush)

首先并不是所有的流都需要刷新,只有使用缓冲池的流才会需要刷新,如缓冲流。
flush方法有三种情况。

  1. OutputStream中的flush是一个空的方法。
  2. 有一些实现类中,没有重写flush方法,直接是继承父类的flush方法。
  3. flush方法被重写,如BufferedOutputStream缓冲输出流

所以打印流中参数设置的流符合上述三种情况并切实使用缓冲池,才会涉及到刷新,当然OutputStream可有可无,其flush方法是象征性的,内容为空,以及有一些流的flush方法使用的是OutputStream的flush方法,也可有可无,但最好有,如DataOutputStream


同时,打印流实现自动刷新也是有条件的

  • 查看PrintStream构造器源码
autoFlush – Whether 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

autoFlush设置为true,只有在使用println或换行符\n才自动刷新

  • 查看PrintWrite构造器源码
autoFlush – A boolean; if true, the println, printf, or format methods will flush the output buffer

autoFlush设置为true,只有使用println,printf,format才会执行自动刷新

posted @ 2024-05-26 21:44  ashuai~  阅读(34)  评论(0编辑  收藏  举报