中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

java怎么讀文件

發布時間:2022-01-06 16:59:33 來源:億速云 閱讀:108 作者:iii 欄目:互聯網科技

本篇內容介紹了“java怎么讀文件”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

寫文件基本是單線程順序寫的,用 FileOutputStream 就可以了。但是讀文件一般不是順序讀的,為了實現想讀哪里讀哪里的功能,通常需要 RandomAccessFile。

在我們讀文件之前,首先要知道數據起始位置(offset)和長度(length),這樣才能使用 RandomAccessFile 的 seek方法移動到數據起始位置,然后將數據讀出來。

基本過程就是這樣的,很簡單:

java怎么讀文件

上面這段代碼看起來挺完整的,但是,缺少了一個重要環節,驗證。當你交給一個人做一件事之后,要驗證他是否完成,以及完成的怎么樣。這里也一樣。

RandomAccessFile 的 read(byte b[]) 方法的定義是這樣的(去掉了不重要的doc):讀取 b.length 個字節,放到 b 中,并返回一共讀取了多少個字節;當到達文件末尾,沒有數據可讀時,返回 -1。

java怎么讀文件

在程序中每一個細節都是需要注意的。那么,這里為什么要有返回值?

讀多少數據是我告訴這個方法的,它又返回給我,這不是有病嗎?不是。因為能讀出來多少數據是不確定的,即這個方法不能保證一次調用肯定能讀出來 b.length 個字節的數據。其中一個原因是:文件沒有這么多字節可讀。

不確定還有沒有其他原因,我在一個4G的文件中單線程隨機讀取1G以內的數據4萬次,返回的值都和要求讀取的值一樣,但是一個 up to 應該不能為這個方法打包票,即還有其他原因會導致方法無法讀取到需要的數據。這里是猜測,暫且命名 喬老師猜想

我為什么要提這個 up to 呢,因為 InputStream 的 read(byte b[]) 的說明更過分:

java怎么讀文件

第一句說  Reads some number of bytes from the input stream java怎么讀文件 這是什么doc,搞笑呢?但是這就是這個方法的本來面目。它確實無法保證能讀到你想要的完整數據。

但是,有一點是可以確定的,那就是  the total number of bytes read into the buffer 。你可以檢查是否讀到了完整的數據。

而實際系統中:你必須檢查是否讀到了完整的數據。否則你的系統可能崩掉,而你還不知道問題出在哪。

那么,有沒有補救措施呢,是有的,RandomAccessFile 方法提供了另一個方法:這個方法在讀到 b.length 個字節之前不會給你返回的,除非遇到文件末尾或者遇到異常。這個方法就比較靠譜了。

java怎么讀文件

而這個方法的實現是將原來的讀方法套了個循環:一次沒讀完,我就接著讀!直到讀到 0 個字節,也就是讀到文件末尾了。

java怎么讀文件

這個方法的實現可以驗證 喬老師猜想,(如果普通的 read 方法可以保證除了遇到文件末尾,都能返回需要的數據,就不需要循環讀取了,只需要讀一次判斷 count 是否為 0 拋出異常就好了。因此,普通的 read 方法肯定還有其他原因會導致無法讀取需要的數據)。

在使用了 readFully() 方法后,我們只需要處理 EOFException(End of File Exception,讀到文件末尾了還沒讀到要求的數據長度) 一種異常就好了。

因此,完整的讀流程為:使用 RandomAccessFile 的 readFully + 檢查

java怎么讀文件

“java怎么讀文件”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

德江县| 宣化县| 姜堰市| 乐亭县| 石柱| 五寨县| 盐边县| 库车县| 清流县| 尉氏县| 嘉祥县| 清镇市| 清水县| 西畴县| 富蕴县| 涞源县| 朝阳市| 银川市| 平塘县| 嘉鱼县| 东辽县| 离岛区| 增城市| 丹阳市| 保亭| 泌阳县| 论坛| 阳新县| 湘乡市| 桑日县| 克拉玛依市| 宝坻区| 荃湾区| 梨树县| 苏州市| 新津县| 元阳县| 景德镇市| 高尔夫| 右玉县| 平陆县|