它似乎已經很快了,我只是想知道如果有人知道它是否使用NIO。我試圖搜索整個NIO的源代碼(好吧,它的搜索方式:)大聲笑);但沒有碰到任何東西。另外,如果它不使用NIO;你認爲修改log4j以使用NIO也值得它更快嗎?任何指針建議和鏈接到一些資源會很有幫助。log4j是否使用NIO將數據寫入文件?
回答
此外,如果它不使用NIO;你 認爲它值得修改 log4j使用NIO也使它更快 更快?
不,除非日誌記錄是應用程序活動的重要組成部分,在這種情況下通常會出現錯誤。
你似乎覺得NIO'更快',但這通常並不正確。只要嘗試創建兩個文件,一個使用標準IO,一個使用NIO,向他們寫入一堆數據並關閉它們。你會看到性能幾乎不同。 NIO只會在某些使用情況下表現更好;通常情況下很多連接。
查看FileAppender source。幾乎只是標準java.io
。
在這種情況下,我看不出任何FileChannel比FileOutputStream更快的原因。
也許通過使用MappedByteBuffer?但在追加模式下,行爲取決於操作系統。
最終,性能取決於您的硬盤驅動器,您的代碼很重要。
是的,我只是在考慮MBB。這就是爲什麼我自己問這個問題!謝謝!記住這些要點。 – vpram86 2010-07-02 13:14:26
詳細闡述了Confusion的答案,還有File NIO塊。這就是爲什麼它不會比傳統的文件IO在某些的情況下更快。引述O'Reilly's Java NIO book:
文件通道總是阻塞和不能被置於 非阻塞模式。現代操作系統具有複雜的緩存 和預取算法,通常會給本地磁盤I/O帶來很低的延遲。網絡文件系統通常具有較高的等待時間,但經常會受益於相同的優化。由於文件I/O具有根本不同的性質,面向流的I/O的非阻塞範例對於面向文件的操作沒有多大意義。 對於文件I/O,真正的贏家是異步I/O,它允許 進程從操作系統 請求一個或多個I/O操作,但不會等待它們完成。過程在稍後通過 通知所請求的I/O已完成。異步I/O是 許多操作系統上不具備的高級功能。作爲未來的NIO增強,正在考慮的 。
編輯:這樣說,如果您使用File NIO和MappedByteBuffer,您可以獲得更好的讀/寫效率。請注意,在Log4j 2中使用MappedByteBuffer在consideration之下。
哇很混亂,兩年半後還是這樣嗎? – matanster 2016-06-10 09:05:11
- 1. 使用log4j 2寫入數據文件或數據庫表
- 2. 將log4j輸出寫入現有文件
- 3. log4j不將日誌寫入文件
- 4. log4j無法寫入文件
- 5. log4j不寫入文件
- 6. 使用Java nio編寫文件元數據的問題
- 7. 將數據寫入文件
- 8. 寫的char []到文件使用NIO
- 9. Log4J - 確定記錄器是否無法寫入文件系統
- 10. 如何使用Log4j和Storm Framework將日誌寫入文件?
- 11. 如何關閉Java Nio文件寫入
- 12. 用java將數據寫入文件
- 13. 使用文件寫入操作將5M數據寫入csv文件
- 14. 使用nio讀取文件並寫入servlet
- 15. 是否可以使用Extjs4將數據寫入JSON?
- 16. CreateFileMappingA是否寫入文件?
- 17. 寫入文本文件時是否需要清理POST數據?
- 18. 如何使用ANSI格式將數據寫入文本文件
- 19. 使用BufferedWriter將數據從不同類寫入文本文件
- 20. 如何使用JavaScript將數據寫入文本文件
- 21. Log4J 2 XML配置不寫入文件
- 22. log4j-Logger未寫入日誌文件
- 23. log4j庫沒有寫入文件
- 24. 記錄器不寫入文件Log4J
- 25. 使用文件和文件系統:在NIO之前,將來使用NIO和將來使用NIO2
- 26. 將數據寫入本地JSON文件
- 27. 如何將數據寫入.SLK文件
- 28. 將數據寫入到文件
- 29. 將數據集寫入xml文件
- 30. 將RTP流數據寫入文件
是的;這些是在一種模式下應用程序的重要組成部分,我希望該模式也可以更好地執行,我從一個應用程序寫入,所以我不知道如何在這裏關聯連接。嘗試編寫日誌記錄的線程數量是多少?是的,有很多線程試圖寫入內容。我知道從應用程序寫入大量日誌並不是最好的解決方案,但我只是想確保它不是最壞的:)也是。非常感謝您的見解。我會嘗試將IO和NIO與一些例子進行比較。 – vpram86 2010-07-01 07:18:14