• java IO流 一、


    * IO流用来处理设备之间的数据传输


    * Java对数据的操作是通过流的方式


    * Java用于操作流的类都在IO包中


    * 流按流向分为两种:输入流,输出流。


    * 流按操作类型分为两种:
    * 字节流 : 字节流可以操作任何数据,因为在计算机中任何数据都是以字节的形式存储的
    * 字符流 : 字符流只能操作纯字符数据,比较方便。

    * IO流常用父类

    * 字节流的抽象父类:
    * InputStream
    * OutputStream


    * 字符流的抽象父类:
    * Reader
    * Writer

    * IO程序书写
    * 使用前,导入IO包中的类
    * 使用时,进行IO异常处理
    * 使用后,释放资源

    ###IO流(FileInputStream)
    * read()一次读取一个字节
    *
    FileInputStream fis = new FileInputStream("aaa.txt"); //创建一个文件输入流对象,并关联aaa.txt
    int b; //定义变量,记录每次读到的字节
    while((b = fis.read()) != -1) { //将每次读到的字节赋值给b并判断是否是-1
    System.out.println(b); //打印每一个字节
    }

    fis.close(); //关闭流释放资源

     ==============================================================

    read方法解析:

    FileInputStream fis= new FileInputStream("i:\abc.txt"); //abc.txt 共25个字符
    FileOutputStream fos= new FileOutputStream("i:\a1.txt");
    byte[] arr= new byte[10];
    int len;
    len = fis.read(arr);
    System.out.println(len); //10
    len=fis.read(arr,0,len);
    System.out.println(len);//10
    len=fis.read(arr,0,len);
    System.out.println(len);//10

    read(arr,0,len); 
    源码: 
    public int read(byte b[]) throws IOException {
    return readBytes(b, 0, b.length);
    }

     =================================================================

    ###IO流(read()方法返回值为什么是int)
    * read()方法读取的是一个字节,为什么返回是int,而不是byte
    *
    因为字节输入流可以操作任意类型的文件,比如图片音频等,这些文件底层都是以二进制形式的存储的,如果每次读取都返回byte,有可能在读到中间的时候遇到111111111
    那么这11111111是byte类型的-1,我们的程序是遇到-1就会停止不读了,后面的数据就读不到了,所以在读取的时候用int类型接收,如果11111111会在其前面补上
    24个0凑足4个字节,那么byte类型的-1就变成int类型的255了这样可以保证整个数据读完,而结束标记的-1就是int类型
    ###20.04_IO流(FileOutputStream)
    * write()一次写出一个字节
    *
    FileOutputStream fos = new FileOutputStream("bbb.txt"); //如果没有bbb.txt,会创建出一个
    //fos.write(97); //虽然写出的是一个int数,但是在写出的时候会将前面的24个0去掉,所以写出的一个byte
    fos.write(98);
    fos.write(99);
    fos.close();


    ###IO流(FileOutputStream追加)
    * A:案例演示
    * FileOutputStream的构造方法写出数据如何实现数据的追加写入
    *
    FileOutputStream fos = new FileOutputStream("bbb.txt",true); //如果没有bbb.txt,会创建出一个
    //fos.write(97); //虽然写出的是一个int数,但是在写出的时候会将前面的24个0去掉,所以写出的一个byte
    fos.write(98);
    fos.write(99);
    fos.close();

    ###IO流(拷贝图片)
    * FileInputStream读取
    * FileOutputStream写出

    FileInputStream fis = new FileInputStream("致青春.mp3"); //创建输入流对象,关联致青春.mp3
    FileOutputStream fos = new FileOutputStream("copy.mp3");//创建输出流对象,关联copy.mp3

    int b;
    while((b = fis.read()) != -1) {
    fos.write(b);
    }

    fis.close();
    fos.close();

     ###IO流(拷贝音频文件画原理)


    * 字节流一次读写一个字节复制音频
    * 弊端:效率太低

    ###IO流(字节数组拷贝之available()方法)
    * A:案例演示
    * int read(byte[] b):一次读取一个字节数组
    * write(byte[] b):一次写出一个字节数组
    * available()获取读的文件所有的字节个数
    * 弊端:有可能会内存溢出

    FileInputStream fis = new FileInputStream("致青春.mp3");
    FileOutputStream fos = new FileOutputStream("copy.mp3");
    byte[] arr = new byte[fis.available()]; //根据文件大小做一个字节数组
    fis.read(arr); //将文件上的所有字节读取到数组中
    fos.write(arr); //将数组中的所有字节一次写到了文件上
    fis.close();
    fos.close();

    ###IO流(定义小数组)
    * write(byte[] b)
    * write(byte[] b, int off, int len)写出有效的字节个数


    ###IO流(定义小数组的标准格式)
    * A:案例演示
    * 字节流一次读写一个字节数组复制图片和视频
    FileInputStream fis = new FileInputStream("致青春.mp3");
    FileOutputStream fos = new FileOutputStream("copy.mp3");
    int len;
    byte[] arr = new byte[1024 * 8]; //自定义字节数组

    while((len = fis.read(arr)) != -1) {
    //fos.write(arr);
    fos.write(arr, 0, len); //写出字节数组写出有效个字节个数
    }

    fis.close();
    fos.close();

  • 相关阅读:
    windows环境下ElasticSearch6 安装head插件
    画流程图挺好的软件---visio
    Spring AOP使用注解记录用户操作日志
    通用mapper版+SpringBoot+MyBatis框架+mysql数据库的整合
    chrony 时间同步服务器
    Python面试题
    新认知丨认知信念决定学习能力
    Ubuntu18、Ubuntu16、Ubuntu14更新源
    让人头疼的时候最有创造力
    安卓学习(2)
  • 原文地址:https://www.cnblogs.com/yimian/p/6545472.html
Copyright © 2020-2023  润新知