编程语言
首页 > 编程语言> > Java——RAF

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