美文网首页
2021-09-21 IO流(RandomAccessFile)

2021-09-21 IO流(RandomAccessFile)

作者: Denholm | 来源:发表于2021-10-16 14:56 被阅读0次

RandomAccessFile

1.随机访问文件,自身具备读写方法
2.通过skipBytes(int x),seek(int x)来达到随机访问


clipboard.png

RandomAccessFile:该类不是IO体系中子类,而是直接继承自Object;但它是IO包中成员,因为它具备读写功能,其内部封装了一个数组,通过指针对数组的元素进行操作,可以通过getFilePointer获取指针位置,同时可以通过seek改变指针的位置。
seek()
其实完成读写的原理就是内部封装了字节输入流和输出流,通过构造函数可以看出,该类只能操作文件,而且操作文件还有模式:只读r,读写rw等。
如果模式为只读r,不会创建文件,会去读取一个已存在文件,如果该文件不存在,则会出现异常;如果模式为读写rw,操作的文件不存在,会自动创建,如果存在则不会覆盖。
write()方法只写出int类型的最低八位
writeInt()方法写出int的所有位
一个中文两个字节

clipboard.png
RandomAccessFile可以实现数据的分段写入
多线程下载
import java.io.RandomAccessFile;

public class RandomAccessFileDemo {

    public static void main(String[] args) throws Exception {
        writeFile();
        readFile();
    }

    public static void readFile() throws Exception {
        RandomAccessFile r = new RandomAccessFile("E:\\ran.txt", "r");
        // 调整对象指针
//        r.seek(8);
        // 跳过指定的字节数
        r.skipBytes(8);
        byte[] buf = new byte[4];
        r.read(buf);
        String name = new String(buf);
        int age = r.readInt();
        System.out.println("name:" + name);
        System.out.println("age:" + age);
        r.close();
    }

    public static void writeFile() throws Exception {
        RandomAccessFile r = new RandomAccessFile("E:\\ran.txt", "rw");
//        r.seek(0);
        r.write("李四".getBytes());
        r.writeInt(97);
        r.write("王五".getBytes());
        r.writeInt(99);
        r.close();
    }

}

相关文章

网友评论

      本文标题:2021-09-21 IO流(RandomAccessFile)

      本文链接:https://www.haomeiwen.com/subject/ilebgltx.html