System.out是一個PrintStream對象。我閱讀了PrintStream上的文檔。我沒有得到的是爲什麼System.out.print導致緩衝區被刷新?這不應該只發生在println上嗎?爲什麼System.out.print會導致自動刷新?
回答
這不應該只發生在println上嗎?
Javadoc沒有說什麼時候它不會被刷新。它說將刷新在println()
或換行。
我一直在NetBeans中試驗這個。顯然這似乎並不重要。即使在關閉自動刷新功能時,println似乎也在沖洗。這裏是我的小代碼: public class C {public static void main(String [] args)throws IOException {0} {0} {0} {0} PrintStream ps = new PrintStream(new FileOutputStream(「Test.txt」)); ps.println(「VinDiesel!」); //ps.flush(); ps.close(); } } – Chatterjee
@Chatterjee我沒有看到該測試應該證明什麼。它不使用系統,並關閉流刷新它。 – EJP
是的,我剛纔意識到。我寧願將其重寫爲println不適用於普通的PrintStream對象。但是,假設我在關閉之前嘗試從同一個文件讀取數據。我仍然發現字符串已被刷新。我在這裏認真做錯了什麼?對不便,我很抱歉 – Chatterjee
您希望在調用System.out.print()時刷新緩衝區,因爲您希望打印該緩衝區。當我打印時,我想讓它打印一些東西。如果沒有刷新,它只會留在緩衝區中,我什麼都看不到。
檢出沖水here。
基本上它是一個保證,它會立即打印。
我明白這一點。不過,我引用了PrintStream的Java文檔中的以下內容: 「或者,可以創建PrintStream以便自動刷新;這意味着在寫入字節數組後,會自動調用flush方法,其中一個println方法被調用,或者換行字符或字節('\ n')被寫入。「 這裏沒有說明打印的調用會導致緩衝區被刷新。多數民衆贊成我的意思 – Chatterjee
在重複事實已經被注意到的危險,讓我嘗試解釋文檔的方式有點不同......
看來,這只是在PrintBuffer 創建時(即,在構造函數調用期間)可以設置PrintStream的autoFlush行爲。另外,正如您已經指出的那樣,該文檔指出,在調用任何各種公共PrintBuffer構造函數時,如果未指定autoflush狀態,將導致創建非自動填充PrintStream。
但是,在System.out的情況下,您沒有調用PrintBuffer的construtor。 java.lang.System類在VM啓動時實例化「out」PrintStream。這意味着,當您請求System對象存儲在其「out」字段中的PrintStream對象時,您不知道調用了哪個構造函數,因此當您詢問時不知道流傳遞給您的自動刷新狀態爲了它。
我同意,如果用於java.lang.System的doc指定包含在其「out」字段中的流將其自動刷新行爲設置爲true,那將會非常好。但是,這不是一個「要求」,不僅僅是我需要記錄從我的(假設的)myCrazyPanel.getTheChangeColorsButton()返回的JButton是啓用還是禁用。是的,按鈕默認啓用,但如果JButton被禁用,則不允許抱怨。這裏同樣的事情。
感謝您的解釋@Bob。我現在試圖檢查println是否在普通的PrintStream對象的情況下自動刷新 – Chatterjee
- 1. 爲什麼設置ManyToOne父項會導致刷新失敗?
- 2. 什麼原因導致自動更新
- 3. System.out.print導致延遲?
- 4. 什麼會導致自動更新iTunes的訂閱不續約?
- 5. dojo.xhrget()超時會導致自動頁面刷新。如何阻止?
- 6. 什麼會導致&URLS自動轉換爲&?
- 7. 爲什麼不會自動刷新圖像
- 8. 爲什麼我會關閉System.Diagnostics跟蹤自動刷新?
- 9. 綁定到集合的ListBox不會自動刷新。爲什麼?
- 10. 爲什麼選項卡會在Safari 5.1中自動刷新?
- 11. 爲什麼hibernate session.close()不會自動刷新數據?
- 12. 爲什麼由自定義CursorAdapter管理的ListView會自動刷新新數據?
- 13. 爲什麼這個基於javascript的打印會導致Safari刷新頁面?
- 14. 爲什麼常規表單提交POSTing數據會導致頁面刷新?
- 15. 爲什麼閏秒會導致問題?
- 16. 此程序爲什麼會導致InputMismatchException?
- 17. 這爲什麼會導致GHCI掛起?
- 18. 此代碼爲什麼會導致ArgumentOutOfRangeException?
- 19. 爲什麼EntityManagerFactoryImpl.createEntityManager()會導致NullPointerException?
- 20. 什麼會導致IE10中event.dataTransfer.files爲空?
- 21. 什麼會導致DOMNode :: nodeValue爲空?
- 22. GrayScale(ColorMatrix)會導致OutOfMemoryException。爲什麼?
- 23. 這爲什麼會導致Seg Fault?
- 24. 爲什麼更換$$只會導致$
- 25. 爲什麼startActivity會導致崩潰?
- 26. 爲什麼這會導致SIGABRT錯誤?
- 27. PDO:爲什麼會導致錯誤?
- 28. 爲什麼會導致段錯誤?
- 29. 什麼會導致此Java行爲?
- 30. 爲什麼DateTime.ToString(「h」)會導致異常?
相關 - http://stackoverflow.com/questions/9402529/will-javas-system-out-print-buffer-forever-until-println – Coffee