字节流

  • 字节流的父类(抽象类):

    • InputStream:字节输入流
      • public int read(){}
      • public int read(byte[] b){}
      • public int read(byte[] b, int off, int len){}
    • OutputStream:字节输出流
      • public void write(int n){}
      • public void write(byte[] b){}
      • public void write(byte[] b, int off, int len){}
  • 文件字节流

    • FileInputStream:文件输入流

      • public int read(byte[] b) //从流中读取多个字节,将读到内容存入b数组,返回实际读到的字节数;如果达到文件的尾部,则返回-1
      /*
      D:\aaa.txt内容:
      aaabbbccddd
      */
      
      //创建FileInputStream,指定读取路径
      FileInputStream fis = new FileInputStream("D:\\aaa.txt"); //抛出异常
      
      //读取文件
      //1.单个字节读取
      int data = 0;
      while((data = fis.read())!=-1){
          System.out.print((char)data); //aaabbbccddd
      }
      //2.一次读取多个字节
      byte[] buf = new byte[3]; //一次读三个字节
      int count = 0;
      while((count = fis.read(buf)) != -1){
          System.out.print(new String(buf,0,count));
      }
      
      //关闭
      fis.close();
      
    • FileOutputStream:文件输出流

      • public void write(byte[] b) //一次写多个字节,将b数组中所有字节,写入输出流
      //创建FileOutputStream,指定输出路径
      FileOutputStream fos = new FileOutputStream("D:\\bbb.txt",true); //抛出异常,true表示每次写入不覆盖上次内容,接着写入
      
      //写入文件
      //一次写一个
      fos.write(97);
      fos.write('b');
      fos.write('c');
      //一次写多个
      String s = "hello,world!";
      fos.write(s.getBytes());
      
      //关闭
      fos.close();
      /*
      输出到D盘文件bbb
      abchello,world!
      */
      
    • 复制文件

      //创建流
      //文件字节输入流
      FileInputStream fis = new FileInputStream("D:\\001.jpg"); //抛出异常
      //文件字节输出流
      FileOutputStream fos = new FileOutputStream("D:\\002.jpg"); //抛出异常
      //一边读一边写
      byte[] buf = new byte[1024];
      int count = 0;
      while((count = fis.read(buf)) != -1){
          fos.write(buf,0,count);
      }
      
      //关闭
      fis.close();
      fos.close();
      
  • 字节缓冲流

    • 缓冲流:BufferIntputStream/BufferOutputStream
      • 提高IO效率,减少访问磁盘的次数
      • 数据存储在缓冲区中,flush是将缓存区的内容写入文件中,也可以直接close

    例1:BufferIntputStream的使用:

    /*
    D:\aaa.txt内容:
    aaabbbccddd
    */
    
    //创建BufferIntputStream,指定读取路径
    FileInputStream fis = new FileInputStream("D:\\aaa.txt"); //抛出异常
    BufferIntputStream bis = new BufferIntputStream(fis);
    
    //读取文件
    //1.默认缓冲区一次读取8k
    int data = 0;
    while((data = bis.read())!=-1){
        System.out.print((char)data); //aaabbbccddd
    }
    //2.一次读取多个字节
    byte[] buf = new byte[1024]; //一次读1k
    int count = 0;
    while((count = bis.read(buf)) != -1){
        System.out.print(new String(buf,0,count));
    }
    
    //关闭
    bis.close();
    

    例2:BufferOutputStream的使用

    //创建字节输出缓冲流
    FileOutputStream fos = new FileOutputStream("D:\\buffer.txt");
    BufferOutputStream bos = new BufferOutputStream(fos);
    
    //写入文件
    for(int i = 0; i < 10; i++){
        bos.write("你好! ".getBytes()); //写入8k的缓冲区
        bos.flush(); //刷新到硬盘
    }
    
    //关闭(内部调用flush方法)
    bos.close();
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Remote_Li

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值