參考: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方法有三種情況。
- OutputStream中的flush是一個空的方法。
- 有一些實現類中,沒有重寫flush方法,直接是繼承父類的flush方法。
- 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才會執行自動重新整理