Java IO详解——随机访问文件流

1、什么是 随机访问文件流 RandomAccessFile?

该类的实例支持读取和写入随机访问文件。 随机访问文件的行为类似于存储在文件系统中的大量字节。 有一种游标,或索引到隐含的数组,称为文件指针 ; 输入操作读取从文件指针开始的字节,并使文件指针超过读取的字节。 如果在读/写模式下创建随机访问文件,则输出操作也可用; 输出操作从文件指针开始写入字节,并将文件指针提前到写入的字节。 写入隐式数组的当前端的输出操作会导致扩展数组。 文件指针可以通过读取getFilePointer方法和由设置seek方法。

通俗来讲:我们以前讲的 IO 字节流,包装流等都是按照文件内容的顺序来读取和写入的。而这个随机访问文件流我们可以再文件的任意地方写入数据,也可以读取任意地方的字节。

我们查看 底层源码,可以看到:

Java IO详解——随机访问文件流

实现了 DataOutput类,DataInput类,那么这两个类是什么呢?

2、数据流:DataOutput,DataInput

①、DataOutput:提供将数据从任何Java基本类型转换为一系列字节,并将这些字节写入二进制流。 还有一种将String转换为modified UTF-8格式(这种格式会在写入的数据之前默认增加两个字节的长度)并编写结果字节系列的功能。

②、DataInput:提供从二进制流读取字节并从其中重建任何Java原语类型的数据。 还有,为了重建设施String从数据modified UTF-8格式。

下面我们以其典型实现:DataOutputSteam、DataInputStream 来看看它的用法:

Java IO详解——随机访问文件流

3、通过上面的例子,我们可以看到因为 RandomAccessFile 实现了数据输入输出流,那么 RandomAccessFile 这一个类就可以完成 输入输出的功能了。

Java IO详解——随机访问文件流

这里面第二个参数:String mode 有以下几种形式:(ps:为什么这里的值是固定的而不弄成枚举形式,不然很容易写错,这是因为随机访问流出现在枚举类型之前,属于Java 历史遗留问题)

Java IO详解——随机访问文件流

第一种:用 随机流顺序读取数据

Java IO详解——随机访问文件流

Java IO详解——随机访问文件流

第二种:随机读取,那么我们先介绍这两个方法

Java IO详解——随机访问文件流

Java IO详解——随机访问文件流

这里所说的偏移量,也就是字节数。一个文件是有N个字节数组成,那么我们可以通过设置读取或者写入的偏移量,来达到随机读取或写入的目的。

我们先看看Java 各数据类型所占字节数:

Java IO详解——随机访问文件流

下面是 随机读取数据例子:

Java IO详解——随机访问文件流

随机流复制文件:

Java IO详解——随机访问文件流

Java IO详解——随机访问文件流

ps:一般多线程下载、断点下载都可以运用此随机流

学习Java的同学注意了!!!

学习过程中遇到什么问题或者想获取学习资源的话,欢迎加入Java学习交流群495273252,我们一起学Java!