2011-05-04 79 views
1

我需要確定一個非常大的字符編碼文件的大小。讀取文件需要很長時間。文件大小緩存和高效檢索Java中的文件大小

我的理解是,當第一次創建/修改文件時,大小會被緩存,所以操作系統可以在文件管理器請求大小時快速檢索值。 (例如,在win explorer中打開一個大文件的屬性對話框似乎很快)

假設上述條件爲真,這可以在Java中檢索嗎?我曾經認爲length()讀取文件以確定大小......或者實際上是否獲得了此緩存大小?或者是否創建一個File對象來讀取/檢索緩存大小?

我自己的研究尚未能夠回答這些問題。

我會很感激一些幫助,我的理解

感謝

+0

重複? http://stackoverflow.com/questions/116574/java-get-file-size-efficiently – laher 2011-05-04 13:21:59

+0

我在查詢之前查看過這篇文章。我不相信它回答我的問題 – bashcrufter 2011-05-04 13:24:28

回答

5

文件系統通常將該長度存儲爲文件說明的一部分。這樣操作系統知道文件的結尾在哪裏。這些信息在訪問時被緩存。並且反覆調用這些信息也會被緩存。

注意:操作系統通常會從磁盤讀取比您要求的更多數據。這是因爲訪問磁盤昂貴且內存相對便宜。例如當你得到一個文件的長度時,它可能會在許多文件的詳細信息中讀取這些文件,假設你也可能需要有關這些文件的信息。即您第一次獲得文件信息時,它可能已被緩存。

2

我認爲你是在想這。長度應該查詢文件系統並快速計算出來。這當然不是讀整個文件,而是計算字節數。

5

getLength()委託給底層本機操作系統函數來獲取文件的長度。你應該沒問題。

3

length()方法不讀取文件。它調用一個本地方法來委託操作系統來獲取文件長度。其響應時間不應取決於實際的文件長度。