• RandomAccessFile


    Exploring RandomAccessFile

    构造方法:

    RandomAccessFile(File file, String mode)
    RandomAccessFile(String path, String mode)
    

    其中,mode参数必须为"r","rw","rws","rwd"其中之一。

    • "r":以只读方式打开

    • "rw":读写方式打开

    • "rwd":当文件不存在的时候,会创建它。而且,每次内容的更新都是同步写入存储设备。

    • "res":与"rwd"类似,会同时将文件元数据写入

    文件元数据是文件的信息,如长度,修改时间,而非文件内容。

    "rwd""rws"确保任何对本地存储设备上文件的写入,都能正确写入,确保宕机时数据丢失(但是速度可能会慢一点)。但是对于非本地存储设备,是没有这种保证的。

    这里是RandomAccessFile的常用方法:

    Method Description
    void close() 关闭文件,释放资源,而且不能再次被打开
    FileDescriptor getFD() 获得该文件的文件描述对象
    long getFilePointer() 获得文件位置指针,从0开始
    long length() 文件长度
    int read() 读取下一个字节,阻塞方法
    int read(byte[] b) 读取b.length()长度的字节到b中
    char readChar() 读取一个字符,阻塞
    int readInt() 读取
    void seek(long pos) 寻址
    void setLength(long newLength) 根据文件长度,可能会截断或者延长
    int skipBytes(int n) 跳过指定的字节数
    void write(byte[] b) 将b写入文件
    void write(int b) 将整数b的低八位写入文件
    void writeChars(String s) 将字符串写入文件
    void writeInt(int i) 写入整数

    当一个文件被打开后,操作系统会潜在的创建一个系统独立的结构代表该文件。指向该结构的一个句柄就存储在java.io.FileDescriptor类中,通过getFD()方法得到该对象。

    文件描述符具有几个特有的方法:

    Method Description
    void sync() 告诉操作系统将缓冲区的内容刷新到本地磁盘
    boolean valid() 判断该文件描述符有效性

    写入文件的数据实际上保存在操作系统的输出缓冲区之中。当缓冲区满了以后,系统再将这些内容写入本地磁盘。缓冲区可以提高写入的性能,因为它是写入内存中去的。

    然而,当你以rwsrwd模式打开文件,这样是直接写入本地磁盘的,通常会比rw模式慢一点。有时候会有这样的场景,你以rw模式打开文件,但是你需要将文件立即写入磁盘,这时候文件描述符就派上用场了,调用sync方法就可以完成。

    Using RandomAccessFile

    我们可以用RandomAccessFile创建一个平面文件数据库,如csv就是这种数据库。

    看源代码吧,这里就不贴了。

  • 相关阅读:
    JPA条件查询时间区间用LocalDateTime的问题
    Java常用的异常类型
    Android 通用流行框架
    html图标插件
    炫酷科技
    使用zxing生成二维码
    八款常见的Android游戏引擎
    opengl es中不同的绘制方式
    Xml序列化去掉命名空间,去掉申明
    win8 app GridView点击子项布局变更
  • 原文地址:https://www.cnblogs.com/xiaojintao/p/6358573.html
Copyright © 2020-2023  润新知