- RandomAccessFile提供了块读写的方法:优点:可以指定位置读写
- eg:byte[] data = new byte[10];
- 第一次读取10个字节长度,拿出来10个字节长度的内容写进去;
- 第二次要读取了10个字节,实际上只读取了8个字节就到文件末尾了,此时写的时候,会把前八个字节+第一次读取的后两个字节内容 = 10个字节,一块写进去,这就是传说中的垃圾数据
- raf是基于指针操作,里面存放的是字节,是低八位的二进制,
- 重载读方法: int read(byte[] data); 表示:一次性读取了data字节数组的总长度的字节量,返回实际读取到的字节量,如果int值为-1,则表示读完了(data[0]...date[n-1])
- byte[] data = new byte[10]; 一次性读取10个字节,int值不为-1,继续读取下10个字节...直到int=-1;表示读完
- 重载写方法:void writer(byte[] data);表示:一次性将给定字节数组中的所有字节写入文件
- 一次性写入10个字节
- 重载方法:void writer(byte[] data,0,len);一次行写入从0到len的长度的字节长度字节,len是实际返回的字节长度,防止有脏数据
- 即:复制文件:
- int len ;
- while(( len = raf.read(data))!= -1 ){
- raf1 = raf.writer(data,0,len);
- }
public static void main(String[] args) throws IOException {
RandomAccessFile src = new RandomAccessFile("123.png","r");
RandomAccessFile desc = new RandomAccessFile("88.png","rw");
/*
RandomAccessFile提供了块读写的方法
读:
int read(byte[] data)
一次性从文件中读取给定的字节数组总长度的字节量并装入到该数组中,
返回值表示 实际 读取到的字节量.如果返回值为-1则表示EOF.
例如
文件数据(总共6个字节):
11011101 10101101 00110011 11010010 11001101 00111101
块读:
byte数组: byte[] data = new byte[10]; 创建能保存10个字节的数组
int len=0; 表示每次实际读取到的字节量
读取前
data:[00000000,00000000,00000000,00000000]
len:0
len = src.read(data);//一次性从文件中读取4个字节并存入该数组
读取后:
data:[11011101,10101101,00110011,11010010]
len:4 字节长度
块写操作
void write(byte[] data)
一次性将给定的字节数组中的所有字节写入文件
例如:
data:[11011101,10101101,00110011,11010010]
desc.write(data);
复制的文件内容:
11011101 10101101 00110011 11010010
*/
/*
8位2进制:00000000 1byte 1字节
1024byte 1kb
1024kb 1mb
1024mb 1gb
1024gb 1tb