摘要:,除了具有的特點外,這個模式要求對文件內容和文件元數(shù)據(jù)的每一個更新都會同步更新至底層的物理存儲。
RandomAccessFile概覽
對文件的讀取,既可以按順序,也可以以任意順序來讀取。
RandomAccessFile提供這樣一種功能。其保存一個指向當前文件位置的指針,可以通過調整指針的位置,讀取一個文件中任意的內容。通過一段簡單的代碼來有個大體的認識:
RandomAccessFile raf = new RandomAccessFile("abc.log", "r"); int logIndex = 10; raf.seek(logIndex); //接下來通過raf進行文件操作構造器
RandomAccessFile提供了兩個構造器
RandomAccessFile(File file, String mode) RandomAccessFile(String path, String mode)模式
通過RandomAccessFile打開一個文件需要指定打開的模式,構造參數(shù)中的mode有四種模式可以選擇:
"r",以只讀的方式打開一個已存在的文件,不可對文件進行寫操作。
"rw",以讀寫的方式打開一個已存在的文件,若文件不存在,則創(chuàng)建一個,可對該文件進行讀寫操作。
"rwd",除了具有"rw"的特點外,這個模式要求對文件內容的每一個更新都會同步更新至底層的物理存儲。
"rws",除了具有"rw"的特點外,這個模式要求對文件內容和文件元數(shù)據(jù)的每一個更新都會同步更新至底層的物理存儲。
文件的元數(shù)據(jù)并非指文件的內容本身,文件的大小以及文件的最后修改時間等等算是元數(shù)據(jù)的一部分
顯然,如果指定了rwd或rws模式,那么對于文件的操作將會相對比較慢一些。
讀寫RandomAccessFile內部維護了一個指針,指向當前讀取或者寫入的位置,當通過RandomAccessFile打開一個已存在的文件或者創(chuàng)建一個新文件時,指針自動指向下標為0的位置。進行寫入操作時,如果指針已經(jīng)指向文件的末尾,那么文件的大小將會被擴大。
當需要進行讀取或者寫入時,首先通過void seek(long pos)將文件的指針指向你想要讀取或寫入的位置,讀取時有以下常用的方法可以進行讀?。?/p>
int read() //讀取下一個字節(jié)
int read(byte[] b) //將讀取的字節(jié)裝入b數(shù)組中
char readChar() //讀取兩個字節(jié),并將其轉型為char類型
int readInt() //讀取四個字節(jié),并將其轉型為int類型
寫入時有以下方法:
void write(int b) //將b的低八位寫入
void writeChars(String s) //將字符串s所代表的字節(jié)寫入
void write(byte[] b) //將字節(jié)數(shù)組b寫入
void writeInt(int i) //寫入4個字節(jié)的i
除了讀取寫入的方法外,setLength(long newLength)方法可以設置文件的大小,如果newLength小于當前文件大小,那么文件將會被截肢,反之,文件將會被擴大到newLength。
FileDescriptor值得注意的是,RandomAccessFile提供了一個FileDescriptor getFD()方法獲取文件所對應的文件描述符對象,文件描述符代表是一種平臺獨立的文件描述結構,通過這個描述符可以對文件進行一些特殊的操作。
FileDescriptor定義了sync()方法,與之前提到的"rwd"和"rwd"一樣,sync方法用來告訴操作系統(tǒng)將緩沖區(qū)的內容全部刷到物理的存儲上。如果沒有指定rwd或者rws模式,那么對文件的寫入將會暫時存儲于操作系統(tǒng)層面的緩沖區(qū)里面,當緩沖區(qū)滿時,操作系統(tǒng)才會將內容刷至物理磁盤,通過sync()方式可以讓操作系統(tǒng)對每一次寫入操作都同步刷新至物理存儲中,以下為一個例子:
RandomAccessFile raf = new RandomAccessFile("abc.log", "rw"); //這里的模式不是rwd或者rws FileDescriptor fd = raf.getFD(); raf.write(...); // 通過fd的sync方法,可以讓寫入操作同步地刷新至物理存儲 fd.sync(); raf.close();
文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://systransis.cn/yun/65342.html
摘要:虛擬機讀取其他進程的數(shù)據(jù)對象的方法可以運行平臺上的其他程序該方法產(chǎn)生一個對象對象代表由該程序啟動啟動的子進程類提供如下三個方法用于和其子進程通信獲取子進程的錯誤流獲取子進程的輸入流獲取子進程的輸出流這里的輸入流輸出流容易混淆從程序的角度思考 Java虛擬機讀取其他進程的數(shù)據(jù) Runtime對象的exec方法可以運行平臺上的其他程序,該方法產(chǎn)生一個Process對象,Process對象...
摘要:用的流從網(wǎng)上下載一個視頻原理就是用對象與目標地址建立一個鏈接,用流的方式從這個鏈接上把視頻的二進制數(shù)據(jù)讀取下載然后再寫入本地文件。然后循環(huán)依次寫入緩存的大小,直至結束。 用Java的IO流從網(wǎng)上下載一個視頻 原理:就是用URL對象與目標地址建立一個鏈接,用IO流的方式從這個鏈接上把視頻的二進制數(shù)據(jù)讀取下載然后再寫入本地文件。 因為小弟比較菜的緣故,不會下載那些加了密的視頻鏈接,這里我就...
摘要:當使用節(jié)點流進行輸入輸出時,程序直接連接到實際的數(shù)據(jù)源,和時間的輸入輸出節(jié)點連接處理流則用于對一個已存在的流進行連接或封裝,通過封裝后的流來實現(xiàn)數(shù)據(jù)讀寫功能,處理流也被稱為高級流。 文件的編碼 文本文件就是字節(jié)序列,可以是任意編碼形式。在中文操作系統(tǒng)上直接創(chuàng)建文本文件,則該文本文件只能識別ANSI編碼,其他編碼方式會產(chǎn)生亂碼 package imooc.io; import java...
摘要:通道可以異步讀寫。使用的方法讀取數(shù)據(jù)創(chuàng)建一個讀數(shù)據(jù)緩沖區(qū)對象從通道中讀取數(shù)據(jù)使用的方法寫入數(shù)據(jù)創(chuàng)建一個寫數(shù)據(jù)緩沖區(qū)對象寫入數(shù)據(jù)關閉完成使用后,您必須關閉它。五提供了一種被稱為的新功能,也稱為本地矢量。功能是通道提供的并不是。 歷史回顧: Java NIO 概覽 Java NIO 之 Buffer(緩沖區(qū)) 其他高贊文章: 面試中關于Redis的問題看這篇就夠了 一文輕松搞懂redis集...
摘要:關于中順序的基本操作關于中順序的基本操作寫在前面最近研究一下中的順序,在網(wǎng)絡上找了一會兒,發(fā)現(xiàn)少有詳細的介紹,顧此在此處說說順序,才學疏淺,如有不對,望賜教。上述代碼中標記位置中,返回下一次操作時的位置。關于JAVA中順序IO的基本操作 寫在前面 最近研究一下JAVA中的順序IO,在網(wǎng)絡上找了一會兒,發(fā)現(xiàn)少有詳細的介紹,顧此在此處說說順序IO,才學疏淺,如有不對,望賜...
閱讀 2252·2021-11-22 09:34
閱讀 1371·2021-10-11 10:59
閱讀 4474·2021-09-22 15:56
閱讀 3364·2021-09-22 15:08
閱讀 3434·2019-08-30 14:01
閱讀 806·2019-08-30 11:16
閱讀 1151·2019-08-26 13:51
閱讀 2933·2019-08-26 13:43