zoukankan      html  css  js  c++  java
  • 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();

  • 相关阅读:
    大型项目前端架构浅谈
    图标使用新姿势- react 按需引用 svg 的实现
    为什么json 不能使用 int64类型
    SSL证书对SEO网站优有什么影响?使用HTTPS的SEO优势
    web安全测试必须注意的五个方面
    在小程序中实现 Mixins 方案
    网站web前端常见的优化措施
    前端 HTML空格的六种方式
    如何正确选型,React Native 还是 Native?
    CSS3 渐变(Gradients)
  • 原文地址:https://www.cnblogs.com/yimian/p/6545472.html
Copyright © 2011-2022 走看看