Java IO 之RandomAccessFile

一、瞭解數據流概念



 數據量其實就是一系列的"010..."的比特串

那麼我們如何傳遞和接受這些比特串呢?下面將介紹一個類RandomAccessFile,該類就可以實現這樣的功能。

二、使用RandomAccessFile類

首先,我們要了解一下什麼是隨機訪問:隨機訪問(有時又稱爲直接訪問)是指同一時間訪問一組序列中的一個隨意元件;反之我們稱另一種訪問方式爲循序訪問。我們可以把文件想象成一些列的比特串存放在一個數組中,隨機訪問就是指,我們可以任意的訪問其中的一個數,而不必進行循序訪問。

我們要介紹的這個類就是用於隨機訪問文件的類:RandomAccessFile,爲了便於隨機讀取,下面的例子限制了字符串的長度。

 

下面我們首先看一組常用的API,大概瞭解即可:

RandomAccessFile(File file, String mode) 創建從中讀取和向其中寫入(可選)的隨機訪問文件流,該文件由 File 參數指定。

RandomAccessFile(String name, String mode) 創建從中讀取和向其中寫入(可選)的隨機訪問文件流,該文件具有指定名稱。

void close() 關閉此隨機訪問文件流並釋放與該流關聯的所有系統資源。 

long length() 返回此文件的長度。 

int skipBytes(int n) 嘗試跳過輸入的 個字節以丟棄跳過的字節。 

讀取數據相關:

int read() 從此文件中讀取一個數據字節。 

int read(byte[] b) 將最多 b.length 個數據字節從此文件讀入 byte 數組。 

int read(byte[] b, int off, int len) 將最多 len 個數據字節從此文件讀入 byte 數組。 

boolean readBoolean() 從此文件讀取一個 boolean。 

byte readByte() 從此文件讀取一個有符號的八位值。 

char readChar() 從此文件讀取一個字符。 

…… ……其他數據類型相似

String readLine() 從此文件讀取文本的下一行。 

寫入數據

 void write(byte[] b) 將 b.length 個字節從指定 byte 數組寫入到此文件,並從當前文件指針開始。 

 void write(byte[] b, int off, int len) 將 len 個字節從指定 byte 數組寫入到此文件,並從偏移量 off 處開始。 

 void write(int b) 向此文件寫入指定的字節。 

 void writeBoolean(boolean v) 按單字節值將 boolean 寫入該文件。 

 void writeByte(int v) 按單字節值將 byte 寫入該文件。 

 void writeBytes(String s) 按字節序列將該字符串寫入該文件。

 void writeChar(int v) 按雙字節值將 char 寫入該文件,先寫高字節。 

 void writeChars(String s) 按字符序列將一個字符串寫入該文件。 

…… ……

 

import java.io.*;
import java.util.Arrays;
public class RandomAccessDemo01 {
	public static void main(String[] args)throws IOException {

			RandomAccessFile raf01 = new RandomAccessFile("D:/FileTest/raf.txt","rw");
			//寫入一組數據限定字符串4位
			String strTest = "abcd";
			int iTest = 33;
			raf01.write(strTest.getBytes());
			raf01.writeInt(iTest);

			//再寫入一組數據
			strTest = "mnuv";
			iTest = 32;
			raf01.write(strTest.getBytes());
			raf01.writeInt(iTest);
			raf01.close();
			
			//下面我們讀取第二組數據
			RandomAccessFile raf02 = new RandomAccessFile("D:/FileTest/raf.txt","r");
			raf02.skipBytes(8);
			byte[] bTest = new byte[4];
			raf02.read(bTest);
			System.out.println("字符串數據:"+new String(bTest)+",整型數據爲:"+raf02.readInt());
	}
}

-------------------

字符串數據:mnuv,整型數據爲:32

------------------- 

更多方法參考API

發佈了73 篇原創文章 · 獲贊 4 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章