當前位置:
首頁 > 知識 > Java IO詳解——隨機訪問文件流

Java IO詳解——隨機訪問文件流

1、什麼是 隨機訪問文件流 RandomAccessFile?

該類的實例支持讀取和寫入隨機訪問文件。 隨機訪問文件的行為類似於存儲在文件系統中的大量位元組。 有一種游標,或索引到隱含的數組,稱為文件指針 ; 輸入操作讀取從文件指針開始的位元組,並使文件指針超過讀取的位元組。 如果在讀/寫模式下創建隨機訪問文件,則輸出操作也可用; 輸出操作從文件指針開始寫入位元組,並將文件指針提前到寫入的位元組。 寫入隱式數組的當前端的輸出操作會導致擴展數組。 文件指針可以通過讀取getFilePointer方法和由設置seek方法。

通俗來講:我們以前講的 IO 位元組流,包裝流等都是按照文件內容的順序來讀取和寫入的。而這個隨機訪問文件流我們可以再文件的任意地方寫入數據,也可以讀取任意地方的位元組。

我們查看 底層源碼,可以看到:

Java IO詳解——隨機訪問文件流

實現了 DataOutput類,DataInput類,那麼這兩個類是什麼呢?

2、數據流:DataOutput,DataInput

①、DataOutput:提供將數據從任何Java基本類型轉換為一系列位元組,並將這些位元組寫入二進位流。 還有一種將String轉換為modified UTF-8格式(這種格式會在寫入的數據之前默認增加兩個位元組的長度)並編寫結果位元組系列的功能。

②、DataInput:提供從二進位流讀取位元組並從其中重建任何Java原語類型的數據。 還有,為了重建設施String從數據modified UTF-8格式。

下面我們以其典型實現:DataOutputSteam、DataInputStream 來看看它的用法:

Java IO詳解——隨機訪問文件流

3、通過上面的例子,我們可以看到因為 RandomAccessFile 實現了數據輸入輸出流,那麼 RandomAccessFile 這一個類就可以完成 輸入輸出的功能了。

Java IO詳解——隨機訪問文件流

這裡面第二個參數:String mode 有以下幾種形式:(ps:為什麼這裡的值是固定的而不弄成枚舉形式,不然很容易寫錯,這是因為隨機訪問流出現在枚舉類型之前,屬於Java 歷史遺留問題)

Java IO詳解——隨機訪問文件流

第一種:用 隨機流順序讀取數據

Java IO詳解——隨機訪問文件流

Java IO詳解——隨機訪問文件流

第二種:隨機讀取,那麼我們先介紹這兩個方法

Java IO詳解——隨機訪問文件流

Java IO詳解——隨機訪問文件流

這裡所說的偏移量,也就是位元組數。一個文件是有N個位元組數組成,那麼我們可以通過設置讀取或者寫入的偏移量,來達到隨機讀取或寫入的目的。

我們先看看Java 各數據類型所佔位元組數:

Java IO詳解——隨機訪問文件流

下面是 隨機讀取數據例子:

Java IO詳解——隨機訪問文件流

隨機流複製文件:

Java IO詳解——隨機訪問文件流

Java IO詳解——隨機訪問文件流

ps:一般多線程下載、斷點下載都可以運用此隨機流


學習Java的同學注意了!!!

學習過程中遇到什麼問題或者想獲取學習資源的話,歡迎加入Java學習交流群495273252,我們一起學Java!

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 Java團長 的精彩文章:

學習spring之前,先了解一下代理模式
對《深入理解Java虛擬機》的總結(一)
Java IO詳解——序列化與反序列化(對象流)
Java圖片上傳(mvc)
Java為什麼對常量的修改沒有生效?

TAG:Java團長 |