I/O流------字节输入输出流问题

I/O流------字节输入输出流问题:

I/O流也称输入输出流,输入指的是读取数据到内存中,输出指内存中的数据存入硬盘或者其他指定的位置, 流 指的是数据

写入数据的原理(内存—>硬盘):
java —> JVM(java虚拟机)—>OS(操作系统)—>OS调用写方法---->把数据写入文件中

1,字节流:
在这里插入图片描述
字节流中分为字节输入流(inputStream)和字节输出流(outputStream).

主要介绍字节输出流中的子类 FileoutputStream(文件字节输出流)
在这里插入图片描述

在这里插入图片描述

1),文件字节输出流:

 //创建FileOutputStream对象。
    FileOutputStream  fos = new FileOutputStream("./a.txt");
    //写入的是97,会转换成二进制数保存到文档中,但注意的是,当我们打开文档的时候,
    fos.write(97);
    fos.close();

注意的是:可以看到创建的文档中输出的是字符
在这里插入图片描述
在这里插入图片描述

字节输出流输出多个字节的方法:将字符串转换成字节数组

String  str ="你好,明天早上来一趟办公室";
    //将字符串转换成字节数组。
    byte[] arrs = str.getBytes();
    fos.write(arrs);
    fos.close();

在这里插入图片描述

FileOutputStream()中第二个参数是追加写开关,参数类型是布尔类型,值为True,则就是追加写入数据的时候不覆盖原来的数据内容。值为False则表示相反。注意的是,追加的时候如果要有换行,则要加入”\r\n“;另外write(byte,偏移量的起始位置,字节数)

 //创建FileOutputStream对象。
    FileOutputStream  fos = new FileOutputStream("./c.txt" ,true);
    fos.write("今天是开心的一天.\r\n".getBytes());
    fos.close();

在这里插入图片描述

2)文件字节输入流:从硬盘上把数据写入到内存中
用到的方法为 int read():读取到文件的末尾返回-1;

        //创建对象,参数为已经存在的文件文本,如果不存在,则会报错。
        FileInputStream fos = new FileInputStream("./a.txt");
        int len=0;
        while((len=fos.read())!=-1){
            System.out.print((char)len);
            }

一次性从硬盘中读取多个字符:注意的是 read(byte[])参数是将读取的字节存入到字节数组中(这里的byte数组实质上起到一个缓冲的作用),这样在将字节数组转换成字符串就可以了
在这里插入图片描述
String(arr,起始位置,读取的长度):在将字符数组转换成字符串的时候,可以指定的一段数据。

在这里插入图片描述

案例:将某路径下的音频文件赋值到指定文件中取:注意,这里用currentTimeMillis()将程序的起始时间和结束时间接收,然后算出整个文件赋值的耗时。

  //创建对象读取数据
        FileInputStream fis  = new FileInputStream("D:\\pic1\\2.mp4");

        //创建对象写入数据
        FileOutputStream fos = new FileOutputStream("D:\\pic2\\2.mp4");

        //计算程序的运行时间(单位:毫秒)
        long  i = System.currentTimeMillis();
        
        byte[] arr = new byte[2*10000000];
        int len=0;//记录读取到的字节

        //下面的程序执行一读一写操作进行文件的赋值
        while((len=fis.read(arr))!=-1){
            fos.write(arr,0,len);
        }
        
         fos.close();
        fis.close();
        long  e = System.currentTimeMillis();
        System.out.println("复制文件共耗时"+(e-i)+"毫秒");

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值