天天看點

java io系列26之 RandomAccessFile

本文主要介紹 RandomAccessFile。

RandomAccessFile

RandomAccessFile 是随機通路檔案(包括讀/寫)的類。它支援對檔案随機通路的讀取和寫入,即我們可以從指定的位置讀取/寫入檔案資料。

要注意的是,RandomAccessFile

雖然屬于java.io包,但它不是InputStream或者OutputStream的子類;它也不同于FileInputStream和

FileOutputStream。 FileInputStream 隻能對檔案進行讀操作,而FileOutputStream

隻能對檔案進行寫操作;但是,RandomAccessFile 同時支援檔案的讀和寫,并且它支援随機通路。

RandomAccessFile 函數清單

java io系列26之 RandomAccessFile
java io系列26之 RandomAccessFile

1. RandomAccessFile 模式說明

RandomAccessFile共有4種模式:"r", "rw", "rws"和"rwd"。

說明:

(01) 什麼是“中繼資料”,即metadata?

英文解釋如下:

大緻意思是:

metadata

是“關于資料的資料”。在檔案系統中,資料被包含在檔案和檔案夾中;metadata資訊包括:“資料是一個檔案,一個目錄還是一個連結”,“資料的建立

時間(簡稱ctime)”,“最後一次修改時間(簡稱mtime)”,“資料擁有者”,“資料擁有群組”,“通路權限”等等。

(02) "rw", "rws", "rwd" 的差別。

當操作的檔案是存儲在本地的基礎儲存設備上時(如硬碟, NandFlash等),"rws" 或 "rwd", "rw" 才有差別。

當模式是 "rws" 并且 操作的是基礎儲存設備上的檔案;那麼,每次“更改檔案内容[如write()寫入資料]” 或 “修改檔案中繼資料(如檔案的mtime)”時,都會将這些改變同步到基礎儲存設備上。

當模式是 "rwd" 并且 操作的是基礎儲存設備上的檔案;那麼,每次“更改檔案内容[如write()寫入資料]”時,都會将這些改變同步到基礎儲存設備上。

當模式是 "rw" 并且 操作的是基礎儲存設備上的檔案;那麼,關閉檔案時,會将“檔案内容的修改”同步到基礎儲存設備上。至于,“更改檔案内容”時,是否會立即同步,取決于系統底層實作。

2. 示範程式

源碼如下:

java io系列26之 RandomAccessFile
java io系列26之 RandomAccessFile

運作結果:

c1=a

c2=b

buf=9876543210

結果說明:

程式會在源檔案所在目錄生成file.txt;file.txt的内容如下:

java io系列26之 RandomAccessFile

file.txt對應的16進制内容如下:

java io系列26之 RandomAccessFile