Java——RAF
作者:互联网
开头:RAF的简单介绍
package raf;
import java.io.RandomAccessFile;
/**
* java.io.RandomAccessFile
* RAF是专门用来读写文件数据的API.其基于指针对文件数据进行读写
* 操作,可以灵活的编译文件数据内容。
* 创建RAF时可以指定对该文件的权限,常用的有两种:
* r:只读模式
* rw:读写模式
* 对当前目录中的raf.dat文件读写
* RAF支持两种常用构造方法:
* RandomAccessFile(File file, String mode)
* RandomAccessFile(String path, String mode)
*
* 注:相对路径中"./"是可以忽略不写的,因为
* 默认就是从当前目录开始。
*
* RAF创建时含有写权限的情况下,当指定文件
* 不存在时会自动将其创建出来
* @author 13651
*
*/
public class RafDemo {
public static void main(String[] args) throws Throwable {
RandomAccessFile raf = new RandomAccessFile("raf.dat", "rw");
/**
* void write(int d)
* 向文件中写入1字节,写的是给定int值
* 对应2进制的“低八位”
* vvvvvvvv
* 00000000 00000000 00000000 00000001
*/
raf.write(256);
System.out.println("写出完毕!");
raf.close();
}
}
中间:RAF的读操作
package raf;
import java.io.RandomAccessFile;
/**
* 读取文件数据
* @author 13651
*
*/
public class ReadDemo {
public static void main(String[] args) throws Throwable {
/**
* 读取当前目录中raf.dat文件内容
*/
RandomAccessFile raf = new RandomAccessFile("raf.dat","rw");
/**
* int read()
* 读取一个字节,并以int形式返回。
* 若返回值为-1则表示读取到文件末尾。
* 八位二进制,写入-1,读出为255.
* 无论输入啥,对256取模就是结果。
*/
int d =raf.read();
System.out.println(d);
raf.close();
}
}
结尾:RAF的复制
1.高效率复制,块复制:
package raf;
import java.io.RandomAccessFile;
/**
* 若希望提高读写效率,可以通过提高每次实际读写的数据量,
* 减少实际发生的读写操作来做到。
* 单字节读写:随机读写
* 一组字节读写:块读写
* 机械硬盘(磁盘)的块读写效率还是比较好的。但是
* 随机读写效率极差。
* @author 13651
*
*/
public class CopyDemo2 {
public static void main(String[] args) throws Throwable {
RandomAccessFile src = new RandomAccessFile("momi.msi", "r");
RandomAccessFile desc = new RandomAccessFile("vmvm.msi","rw");
/*
* RAF提供的块读写操作的方法:
* int read(byte[] data)
* 一次性读取给定字节数组长度的字节
* 量并存入到该数组中。返回值为实际
* 读取到的字节量,若返回值为-1,表示
* 本次读取的是文件末尾(没读到任何字节)
*
* void write(byte[] data)
* 一次性写出给定字节数组中的所有字节
*/
//记录每次实际读取到的字节量
int len = -1;
//每次要求读取的字节量
//10kb
byte[] data = new byte[1024*10];
long starts = System.currentTimeMillis();
while((len = src.read(data))!=-1) {
desc.write(data, 0, len);
}
long end = System.currentTimeMillis();
System.out.println("复制完毕:"+(end-starts)+"ms");//复制完毕:1500ms
src.close();
desc.close();
}
}
2.一般复制(一般不用)
package raf;
import java.io.RandomAccessFile;
/**
* 复制文件
* @author 13651
*
*/
public class CopyDemo {
public static void main(String[] args) throws Throwable {
/**
* 创建两个RAF,一个用来读原文件,一个用来往复制文件中写
* 。顺序从原文件读取每个字节写到复制文件中。
*/
RandomAccessFile src = new RandomAccessFile("12.png", "r");
RandomAccessFile desc = new RandomAccessFile("22.png", "rw");
int d = -1;
while((d = src.read())!=1) {
desc.write(d);
}
System.out.println("复制完毕!");
src.close();
desc.close();
}
}
标签:RAF,raf,Java,字节,读写,RandomAccessFile,读取 来源: https://blog.csdn.net/qq_50728916/article/details/115413033