[英]java.io and file system block size
假設文件系統塊大小為 4KB,根據我的理解,這意味着所有 IO 的大小都是 4KB。 我有兩個問題:
謝謝你。
要回答您的第一個問題:否。它將磁盤塊的大小讀入kernel memory。 Java(以及以任何語言編寫的程序)無權訪問該 memory。 當您進行原始讀取時,無法保證系統讀取的塊保留在 memory 中,或者以隨后訪問成本不高的方式輕松訪問。 這是一個可能的場景:
程序:“我需要這個文件中的一個字節。”
操作系統:“從文件加載 4KB 塊。 這是你請求的那個塊的字節。”
程序:“謝謝。 我不再需要那個街區了。”
操作系統:“好的。 釋放(或擱置)4KB 塊,因為不再需要它。”…
程序:“我的循環需要這個文件中的另一個字節。”
操作系統:“從文件加載 4KB 塊。 這是你請求的那個塊的字節。”
程序:“謝謝。 我不再需要那個街區了。”
操作系統:“好的。 釋放(或擱置)4KB 塊,因為不再需要它。”等等
當然,我把事情過於簡單化了。 操作系統可能會緩存它已讀取的塊。 但你無法知道持續多久。 也許是幾毫秒,也許是幾分鍾,也許根本不是。
這不僅僅是 Java 中的考慮因素。 C 長期以來一直具有單獨的read(2)和fread(3)函數。
另請參閱: 何時以及為什么使用緩沖輸入和 output 流?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.