javaSE-day05-RandomAccessFile-随机访问文件相关操作

  • 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
       
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值