zoukankan      html  css  js  c++  java
  • 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就是这种数据库。

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

  • 相关阅读:
    再谈ORACLE CPROCD进程
    fopen()函数
    Java抓取网页数据(原网页+Javascript返回数据)
    Vmware ESX 5.0 安装与部署
    PostgreSQL服务端监听设置及client连接方法
    方向梯度直方图(HOG)和颜色直方图的一些比較
    Vim简明教程【CoolShell】
    FileSystemWatcher使用方法具体解释
    几种常见模式识别算法整理和总结
    ThreadPool.QueueUserWorkItem的性能问题
  • 原文地址:https://www.cnblogs.com/xiaojintao/p/6358573.html
Copyright © 2011-2022 走看看