RandomAccessFileDemo3 向文件中写出一组字节的方法
/**
* 文件操作 --- RandomAccessFile
*
* RandomAccessFile提供了一个可以向文件中写出一组字节的方法:
* void write(byte[] bytesArr)
将给定的字节数组中所有字节一次性写出
与该方法相似的还有一个常用方法:
void write(byte[] bytesArr,int offset,int len)
该方法会根据当前指针所在位置处连续写出给定数组中的部分字节,
这个部分是从数组的offset处开始,连续len个字节。
涉及到的其他类的方法: Sting类的 getBytes
API:使用平台的默认字符集将此 String 编码为 byte 序列,并将结果存储到一个新的 byte 数组中。
我的理解: 根据系统默认字符集的不同,本案例中字符串"我的生活很美好"
按照,utf-8每个中文3个字节,最终需要21个字节.Gbk每个中文2个字节.最终需要14个字节.
也就是把14个字节一共在内存中(14*8)位全部写上数字.把这些数字转换成一个byte类型的数组保存.
*/
public class RandomAccessFileDemo3 {
public static void main(String[] args) throws IOException {
//创建一个基于文件访问的读写模式的RandomAccessFile我们只需要在第二个参数中传入”rw”即可。
RandomAccessFile rafDemo = new RandomAccessFile("rafDemo.txt","rw");
//那么这时在使用RandomAccessFile对该文件的访问就是又可读又可写的。
String str = "我的生活很美好"; //写入这段字符串
/* 首先要让计算机把这段字符串翻译成14个 "int型数字" 的 "数组"!
* 按照系统默认字符集将字符串转换为一组字节(转换成了一组int型"低8位"的数组组成了一组字节)
* 用String类的getBytes方法把字符串转换成字节.
*/
byte[] strBytes = str.getBytes();
/* byte[] strBytes = str.getBytes("UTF-8")
* 表示以UTF-8的编码进行转换,一个中文三个字节 */
/*
* 将给定的字节数组中所有字节一次性写出
* void write(byte[] bytesArr)
* void write(byte[] bytesArr,int offset,int len)
* 以下使用了write的重载方法,即写到第8个字节的位置.
*/
rafDemo.write(strBytes,0,8);
//文本文件中的内容: 我的美好
/*提示语句*/
System.out.println("写入完毕");
//读写全部进行完毕后必须关闭释放资源
rafDemo.close();
}
}
RandomAccessFileDemo4 从文件中批量读取字节的方法
/**
* 文件操作 --- RandomAccessFile
*
* RandomAccessFile提供了一个可以从文件中批量读取字节的方法:
* int read(byte[] bytesArr)
该方法会从文件中尝试最多读取给定数组的总长度的字节量,并从给定的字节数组第一个位置开始,
将读取到的字节顺序存放至数组中,返回值为实际读取到的字节量 。
与该方法相似的还有一个常用方法:
涉及到的其他类的方法: Sting类的 getBytes
public class RandomAccessFileDemo4 {
public static void main(String[] args) throws IOException {
//创建一个基于文件访问的读写模式的RandomAccessFile我们只需要在第二个参数中传入”rw”即可。
RandomAccessFile rafDemo = new RandomAccessFile("rafDemo.txt","r");
//那么这时在使用RandomAccessFile对该文件的访问就是又可读又可写的。
byte[] byteArr = new byte[100];
/*这个byte数组,用来保存rafDemo文件的字节量,每次读取最大保存的长度为100字节*/
/*
* int read(byte[] d)
* 一次性尝试读取给定字节数组(byteArr)总长度的字节量,
* 并把读取到的字节量存入到这个数组中,返回值为实际读取到得字节量,若返回值为-1,
* 则说明读取到了文件末尾(或者本次什么都没有读到).
*/
int len = rafDemo.read(byteArr);
System.out.println("rafDemo文件占用的字节为: "+len+"字节");
//rafDemo文件占用的字节为: 8字节 (rafDemo内容为 4个汉字)
/*提示语句*/
System.out.println("读取完毕");
//读写全部进行完毕后必须关闭释放资源
rafDemo.close();
}
}