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万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章