美文网首页
IO Stream - 字节流

IO Stream - 字节流

作者: 七喜丶 | 来源:发表于2021-09-02 13:29 被阅读0次

    字节流

    • IO流概述和分类

      IO流介绍
      1.IO:输入/输出(Input/Output)
      2.流:是一种抽象概念,是对数据传输的总称.也就是说数据在设备间的传输称为 流,流的本质是数据传输
      3.IO流就是用来处理设备间数据传输问题的.常见的应用: 文件复制; 文件上传; 文件下载

      IO流分类
      1.按照数据流向:输出流输入流
      2.按照数据类型:主要字节流字符流),扩展交换流对象流;....)

      IO流使用场景
      1.如果操作的是纯文本文件,优先使用字符流
      2.如果操作的是图片、视频、音频等二进制文件,优先使用字节流
      3.如果不确定文件类型,优先使用字节流.字节流是万能的流

    • 字节流写数据

      字节流抽象基类
      1.InputStream:这个抽象类是表示字节输入流的所有类的超类
      2.OutputStream:这个抽象类是表示字节输出流的所有类的超类
      3.子类名特点:子类名称都是以其父类名作为子类名的后缀

      字节输出流
      FileOutputStream(String name):创建文件输出流以指定的名称写入文件

      使用字节输出流写数据的步骤
      1.创建字节输出流对象(调用系统功能创建了文件,创建字节输出流对象,让字节输出流对象指向文件)
      2.调用字节输出流对象的写数据方法
      3.释放资源(关闭此文件输出流并释放与此流相关联的任何系统资源)

      代码演示

      public class FileOutputStreamDemo01 { public static void main(String[] args) throws IOException { 
        //创建字节输出流对象
         /* 注意点: 
        1.如果文件不存在,会帮我们创建 
        2.如果文件存在,会把文件清空 */
        //FileOutputStream(String name):创建文件输出流以指定的名称写入文件
        FileOutputStream fos = new FileOutputStream("/Users/blue/Desktop/javase12/aaaa/b.txt");
        //void write(int b):将指定的字节写入此文件输出流
        fos.write(97);
        //void close():关闭此文件输出流并释放与此流相关联的任何系统资源。
        fos.close();
      }
      
    • 字节流写数据的三种方式

      方法名 说明
      void write(int b) 将指定的字节写入此文件输出流 一次写一个字节数据
      void write(byte[] b) 将 b.length字节从指定的字节数组写入此文件输出流 一次写一个字节数 组数据
      void write(byte[] b, int off, int len) 将 len字节从指定的字节数组开始,从偏移量off开始写入此文件输出流 一次写一个字节数组的部分数据

    代码演示

    public class FileOutputStreamDemo02 { public static void main(String[] args) throws IOException { 
      //创建字节输出流对象
      //FileOutputStream(String name):创建文件输出流以指定的名称写入文件
      FileOutputStream fos = new FileOutputStream("/Users/blue/Desktop/javase12/aaaa/b.txt");
      //void write(int b):将指定的字节写入此文件输出流
      fos.write(97);
      //void write(byte[] b):将指定的字节数组一字节一字节写入此文件输出流
      byte[] bt = {97, 98, 99};
      fos.write(bt);
      // void write(void write(byte[] b, int off, int len)
       fos.write(bt, 1, 2);
      //void close():关闭此文件输出流并释放与此流相关联的任何系统资源。
      fos.close();
    }
    

    字节流写数据如何实现换行
    windows:\r\n
    linux:\n
    mac:\r

    字节流写数据如何实现追加写入
    1.public FileOutputStream(String name, boolean append)
    2.创建文件输出流以指定的名称写入文件。如果第二个参数为true ,则字节将写入文件的末尾而不是开头
    如下:

    FileOutputStream fos = new FileOutputStream(文件路径, true);

    • 字节流读数据

      字节输入流
      FileInputStream(String name):通过打开与实际文件的连接来创建一个FileInputStream,该文件由文件 系统中的路径名name命名

      字节输入流读取数据的步骤
      1.创建字节输入流对象
      2.调用字节输入流对象的读数据方法
      3.释放资源

    代码演示

    public class FileInputStreamDemo03 { public static void main(String[] args) throws IOException { 
      //创建字节输入流对象
      //FileInputStream(String name):创建文件输出流以指定的名称写入文件
      FileInputStream fis = new FileInputStream("/Users/blue/Desktop/javase12/aaaa/b.txt");
      int b;
      whilr ((b = fis.read( )) != -1) {
          System.out.print(" " + (char)b)
        }
      //void close():关闭此文件输入流并释放与此流相关联的任何系统资源。
      fis.close();
    }
    

    字节流读数据(一次读一个字节数组数据)
    一次读一个字节数组的方法:
    public int read(byte[] b):从输入流读取最多b.length个字节的数据 返回的是读入缓冲区的总字节数,也就是实际的读取字节个数

    代码演示

    public class FileInputStreamDemo04 { public static void main(String[] args) throws IOException { 
     //创建字节输入流对象
     FileInputStream fis = new FileInputStream("文件路径"); 
      byte[] bys = new byte[1024]; //1024及其整数倍
      int len; 
      //循环读取 
      while ((len=fis.read(bys))!=‐1) { 
        System.out.print(new String(bys,0,len)); 
      }
      //释放资源 
      fis.close(); 
    }
    
    • 字节缓冲流

      字节缓冲流介绍
      1.BufferOutputStream:该类实现缓冲输出流.通过设置这样的输出流,应用程序可以向底层输出流写入字 节,而不必为写入的每个字节导致底层系统的调用 2.BufferedInputStream:创建BufferedInputStream将创建一个内部缓冲区数组.当从流中读取或跳过字 节时,内部缓冲区将根据需要从所包含的输入流中重新填充,一次很多字节

      构造方法

      方法名 说明
      BufferedOutputStream(OutputStream out) 创建字节缓冲输出流对象
      BufferedInputStream(InputStream in) 创建字节缓冲输入流对象

      代码演示

      public class BufferStream { public static void main(String[] args) throws IOException { 
         //字节缓冲输出流:
          BufferedOutputStream(OutputStream out) BufferedOutputStream bos = 
          new BufferedOutputStream(new FileOutputStream("文件名")); 
          //写数据 
          bos.write("hello\r\n".getBytes()); 
          bos.write("world\r\n".getBytes()); 
          //释放资源 
          bos.close();
      
          //字节缓冲输入流:
          BufferedInputStream(InputStream in) BufferedInputStream bis = 
          new BufferedInputStream(new FileInputStream("文件路径"));
          //一个字节字节读取
          // int by; 
          // while ((by=bis.read())!=‐1) { 
          // System.out.print((char)by); 
          // }
          byte[] bys = new byte[1024];
      
          int len; 
          while ((len=bis.read(bys))!=‐1) { 
          System.out.print(new String(bys,0,len)); }
          //释放资源 
          bis.close();
      }
      

    相关文章

      网友评论

          本文标题:IO Stream - 字节流

          本文链接:https://www.haomeiwen.com/subject/mrgqwltx.html