java RandomAccessFile

意义

RandomAccessFile类是Java中操作文件内容功能最强大的类,既可以读,也可以写。

RandomAccessFile支持随机访问,可以直接访问文件的任意位置,在文件的任意位置读写数据。如果要随机访问文件内容,RandomAccessFile是很好的选择。

Random,意为随机、任意,RandomAccessFile,即可访问文件的任意位置;RAM(Random Access Memory),即可访问文件/数据任意位置的内存。

继承与实现

在这里插入图片描述

RandomAccessFile直接继承自Object类,看上去就不像是我们之前学习的那么多的输入输出流,都继承于抽象基类。但是,RandomAccessFile通过接口的实现,便能够完成对文件的输入与输出:

public class RandomAccessFile implements DataOutput, DataInput, Closeable
  • 实现了Closeable的接口,Closeable接口又继承了AutoCloseable接口,能够实现流的自动关闭。
  • 实现了DataOutput接口,提供了输出基本数据类型和字符串的方法,如 writeInt,writeDouble,writeChar,writeBoolean,writeUTF。
  • 实现了DataInput接口,提供了读取基本数据类型和字符串的方法,同理对应的把write改成read即可。

RandomAccessFile 类的常用操作方法

构造器

RandomAccessFile(File file, String mode) 

RandomAccessFile(String name, String mode) 

只有这俩构造器,意思是创建一个支持随机访问文件的流,mode是设置访问方式的参数,前者传入File对象,后者传入路径名。
在这里插入图片描述

文件指针

//将指针位置设置为pos,即从流开始位置计算的偏移量,以字节为单位
public void seek(long pos)
//获取指针当前位置,以字节为单位
public native long getFilePointer()
//跳过n个字节的便宜量
public int skipBytes(int n)

read方法

在这里插入图片描述

write方法

在这里插入图片描述

文件操作的四大方法

在这里插入图片描述

内存映射文件

RandomAccessFile的绝大多数功能都已经被JDK 1.4的nio的"内存映射文件(memory-mapped files)"给取代了,但不是全部被取代,所以在使用时你需要考虑一下是否该用"内存映射文件"来代替RandomAccessFile了。

java.nio包使得内存映射变得十分简单

1、首先,从文件中获得一个通道(channel)。通道是用于磁盘文件的一种抽象,它使我们可以访问诸如内存映射、文件加锁机制(下文缓冲区数据结构部分将提到)、文件间快速数据传递等操作系统特性。

 FileChannel channel = FileChannel.open(path, options);

还能通过在一个打开的 File 对象(RandomAccessFile、FileInputStream 或 FileOutputStream)上调用 getChannel() 方法获取。调用 getChannel() 方法会返回一个连接到相同文件的 FileChannel 对象且该 FileChannel 对象具有与 File 对象相同的访问权限。

2、然后,通过调用FileChannel类的map方法进行内存映射,map方法从这个通道中获得一个MappedByteBuffer对象(ByteBuffer的子类)。

3、一旦有了缓冲区,就可以使用ByteBuffer类和Buffer超类的方法来读写数据

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值