Java IO詳解——隨機訪問文件流
1、什麼是 隨機訪問文件流 RandomAccessFile?
該類的實例支持讀取和寫入隨機訪問文件。 隨機訪問文件的行為類似於存儲在文件系統中的大量位元組。 有一種游標,或索引到隱含的數組,稱為文件指針 ; 輸入操作讀取從文件指針開始的位元組,並使文件指針超過讀取的位元組。 如果在讀/寫模式下創建隨機訪問文件,則輸出操作也可用; 輸出操作從文件指針開始寫入位元組,並將文件指針提前到寫入的位元組。 寫入隱式數組的當前端的輸出操作會導致擴展數組。 文件指針可以通過讀取getFilePointer方法和由設置seek方法。
通俗來講:我們以前講的 IO 位元組流,包裝流等都是按照文件內容的順序來讀取和寫入的。而這個隨機訪問文件流我們可以再文件的任意地方寫入數據,也可以讀取任意地方的位元組。
我們查看 底層源碼,可以看到:
實現了 DataOutput類,DataInput類,那麼這兩個類是什麼呢?
2、數據流:DataOutput,DataInput
①、DataOutput:提供將數據從任何Java基本類型轉換為一系列位元組,並將這些位元組寫入二進位流。 還有一種將String轉換為modified UTF-8格式(這種格式會在寫入的數據之前默認增加兩個位元組的長度)並編寫結果位元組系列的功能。
②、DataInput:提供從二進位流讀取位元組並從其中重建任何Java原語類型的數據。 還有,為了重建設施String從數據modified UTF-8格式。
下面我們以其典型實現:DataOutputSteam、DataInputStream 來看看它的用法:
3、通過上面的例子,我們可以看到因為 RandomAccessFile 實現了數據輸入輸出流,那麼 RandomAccessFile 這一個類就可以完成 輸入輸出的功能了。
這裡面第二個參數:String mode 有以下幾種形式:(ps:為什麼這裡的值是固定的而不弄成枚舉形式,不然很容易寫錯,這是因為隨機訪問流出現在枚舉類型之前,屬於Java 歷史遺留問題)
第一種:用 隨機流順序讀取數據
第二種:隨機讀取,那麼我們先介紹這兩個方法
這裡所說的偏移量,也就是位元組數。一個文件是有N個位元組數組成,那麼我們可以通過設置讀取或者寫入的偏移量,來達到隨機讀取或寫入的目的。
我們先看看Java 各數據類型所佔位元組數:
下面是 隨機讀取數據例子:
隨機流複製文件:
ps:一般多線程下載、斷點下載都可以運用此隨機流
學習Java的同學注意了!!!
學習過程中遇到什麼問題或者想獲取學習資源的話,歡迎加入Java學習交流群495273252,我們一起學Java!
※學習spring之前,先了解一下代理模式
※對《深入理解Java虛擬機》的總結(一)
※Java IO詳解——序列化與反序列化(對象流)
※Java圖片上傳(mvc)
※Java為什麼對常量的修改沒有生效?
TAG:Java團長 |