java的RandomAccessFile提供对文件的读写功能,与普通的输入输出流不一样的是RamdomAccessFile可以任意的访问文件的任何地方。这就是“Random”的意义所在。
实例支持对随机访问文件的读取和写入。随机访问文件的行为类似存储在文件系统中的一个大型 byte 数组。存在指向该隐含数组的光标或索引,称为文件指针 ; 输入操作从文件指针开始读取字节,并随着对字节的读取而前移此文件指针。如果随机访问文件以读取/写入模式创建,则输出操作也可用;输出操作从文件指针开 始写入字节,并随着对字节的写入而前移此文件指针。写入隐含数组的当前末尾之后的输出操作导致该数组扩展。该文件指针可以通过 getFilePointer 方法读取,并通过 seek 方法设置。
通常,如果此类中的所有读取例程在读取所需数量的字节之前已到达文件末尾,则抛出 EOFException (是一种 IOException )。如果由于某些原因无法读取任何字节,而不是在读取所需数量的字节之前已到达文件末尾,则抛出 IOException ,而不是 EOFException 。需要特别指出的是,如果流已被关闭,则可能抛出 IOException 。
在JDK 1.4中,RandomAccessFile的绝大多数功能(但不是全部)已经被nio内存映射文件给取代了。
Java的RandomAccessFile类方法:
方法描述
void close()关闭此随机访问文件流并释放与该流关联的所有系统资源。
FileChannelgetChannel()返回与此文件关联的唯一 FileChannel 对象。
FileDescriptorgetFD()返回与此流关联的不透明文件描述符对象。
longgetFilePointer()返回此文件中的当前偏移量,用来查找当前所处的位置。
long length()返回此文件的长度。
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()从此文件读取一个字符
double readDouble()从此文件读取一个 double。
float readFloat()从此文件读取一个 float。
void readFully(byte[] b)将 b.length 个字节从此文件读入 byte 数组,并从当前文件指针开始。
void readFully(byte[] b,int off,int len)将正好 len 个字节从此文件读入 byte 数组,并从当前文件指针开始。
<