RandomAccessFile 是 Java 标准库中提供的一个文件访问类,可以用于读取和写入文件。与其他输入/输出流不同,RandomAccessFile
允许直接访问文件的任意位置,可以在文件中随机定位读写数据。
为什么使用它而不是传统的IO流:
1.RandomAccessFile
允许直接跳转到文件的任意位置进行读写操作,而一般的 IO 流只能顺序读取或写入文件,也就是其seek方法,可以将文件的读写指针放到文件的任意合法位置,这在某些场景下是必要的,比如文件的断点下载,当用户下载某大型文件时,下载到一半突然机器停电了,那么用户的需求是重新下载该文件时可以从上一次的地方继续下载,这就需要一个实时的变量专门记录用户上一次下载的地方到了哪,然后再重新将文件的读写指针定位到这个变量的位置,就实现了断点下载,传统的IO流面对这样的场景将会很麻烦。
2.可以比传统的IO流更高效的读取文件。
构造:
new RandomAccessFile(File file,String mode)即可,file是想要读或写的文件路径,mode是模式,可选项有:
r(只读)、
rw(读写)、
rws(读写,并且相对于"rw"模式,还要求对文件的内容或元数据的每个更新都同步写入到底层存储设备)、
rwd(读写,并且相对于"rw"模式,还要求对文件内容的每个更新都同步写入到底层存储设备。)
常用方法:
int read(),读到最后一个字节之后没字节可读了会返回-1,正常返回的是读到字节的整形变量。
read(byte b[], int off, int len) throws IOException:从此文件中读取最多len个字节的数据到一个字节数组中,off指定从数组的哪里开始写。
write(byte b[], int off, int len) throws IOException:将指定字节数组中的len个字节从off写入文件。
write(byte i);
void seek(long pos) throws IOException:调用本地方法seek(long pos)设置文件指针偏移量,从该文件的开头开始测量,在该位置发生下一次读取或写入。 偏移量可能设置在文件末尾之外。
设置超出文件末尾的偏移量不会改变文件长度。 只有在将偏移量设置为超出文件末尾之后,文件长度才会更改;
注意事项:最好不要通过 for循环或while循环 和 write(byte i) 方法来 一个一个向目标文件写数据,因为这是字节流的写入方式,会形成乱码,如果确实需要 一个字节一个字节的写入目标文件,那么通过 write(byte b[], int off, int len) throws IOException,然后读一个字节到b中,再立马写入目标文件即可。
标签:文件,字节,访问,int,读写,写入,RandomAccessFile,随机 From: https://www.cnblogs.com/xialang/p/17740859.html