RandomAccessFile和nio的"內存映射文件(memory-mapped files)"

RandomAccessFile

RandomAccessFile的惟一父類是Object,與其餘流父類不一樣。是用來訪問那些保存數據記錄的文件的,這樣你就能夠用seek( )方法來訪問記錄,並進行讀寫了。這些記錄的大小沒必要相同;可是其大小和位置必須是可知的。

RandomAccessFile居然會是不屬於InputStream和OutputStream類系的。實際上,除了實現DataInput和DataOutput接口以外(DataInputStream和DataOutputStream也實現了這兩個接口),它和這兩個類系絕不相干,甚至都沒有用InputStream和OutputStream已經準備好的功能;它是一個徹底獨立的類,全部方法(絕大多數都只屬於它本身)都是從零開始寫的。這多是由於RandomAccessFile能在文件裏面先後移動,因此它的行爲與其它的I/O類有些根本性的不一樣。總而言之,它是一個直接繼承Object的,獨立的類。
基本上,RandomAccessFile的工做方式是,把DataInputStream和DataOutputStream粘起來,再加上它本身的一些方法,好比定位用的getFilePointer( ),在文件裏移動用的seek( ),以及判斷文件大小的length( )。此外,它的構造函數還要一個表示以只讀方式("r"),仍是以讀寫方式("rw")打開文件的參數 (和C的fopen( )如出一轍)。它不支持只寫文件,從這一點上看,假如RandomAccessFile繼承了DataInputStream,它也許會幹得更好。
只有RandomAccessFile纔有seek方法,而這個方法也只適用於文件。BufferedInputStream有一個mark( )方法,你能夠用它來設定標記(把結果保存在一個內部 變量裏),而後再調用reset( )返回這個位置,可是它的功能太弱了,並且也不怎麼實用。

RandomAccessFile的絕大多數功能,若是不是所有的話,已經被nio的"內存映射文件(memory-mapped files)"給取代了。 app

nio的"內存映射文件(memory-mapped files)"

相關文章
相關標籤/搜索