ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Java——RAF

2021-04-03 10:34:15  阅读:259  来源: 互联网

标签:RAF raf Java 字节 读写 RandomAccessFile 读取


开头: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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有