首先,RandomAccessFile是一种流,一种可随机访问的文件流。
RandomAccessFile不同于其他IO流按顺序的访问磁盘文件,RandomAccessFile支持对磁盘文件的随机访问,这种随机性是由RandomAccessFile中的 文件指针来决定的。随机访问文件的行为类似存储在文件系统中的一个大型 byte 数组。存在指向该隐含数组的光标或索引,称为文件指针;输入操作从文件指针开始读取字节,并随着对字节的读取而前移此文件指针。如果随机访问文件以读取/写入模式创建,则输出操作也可用;输出操作从文件指针开始写入字节,并随着对字节的写入而前移此文件指针。写入隐含数组的当前末尾之后的输出操作导致该数组扩展。该文件指针可以通过 getFilePointer
方法读取,并通过 seek
方法设置。
使用RandomAccessFile应该了解和注意:
1、由于RandomAccessFile访问文件的行为类似操作存储在文件系统中的一个大型byte数组,因此RandomAccessFile适合操作二进制文件。对于其他格式的文件建议使用其他流进行 操作,不要滥用RandomAccessFile。
2、打开一个RandomAccessFile流相当于同时打开了一个文件输入流和一个文件输出流,输入和输出行为可以同时进行。
3、当要改变RandomAccessFile中的文件指针,要尽量避免使用seek方法,因为seek方法相当消耗性能,可以使用skipBytes(int n)方法替代。
使用RandomAccessFile操作带中文的文件可能会出现中文乱码,解决方案:
1、读:read(byte[] b);
2、写:write(byte[] b);