zoukankan      html  css  js  c++  java
  • Java IO(十) BufferedInputStream 和 BufferedOutputStream

    Java IO(十)BufferedInputStream 和 BufferedOutputStream

    一、BufferedInputStream 和 BufferedOutputStream

    (一)、BufferedInputStream 

    BufferedInputStream 是缓冲字节输入流,继承自FilterInputStream,它的作用是为另一个输入流对象提供一些额外的功能。如:缓冲功能,支持 mark(标记)和reset(重置)功能等。

    BufferedInputStream 本质上是通过一个内部缓冲区数组实现的。例如,在新建某输入流对应的 BufferedInputStream 后,当我们通过read()读取输入流的数据时,BufferedInputStream会将该输入流的数据分批的填入到缓冲区中。每当缓冲区中的数据被读完之后,输入流会再次填充数据缓冲区;如此反复,直到我们读完输入流数据位置。

    BufferedOutputStream 是缓冲字节输入流,继承自FilterOutputStream,它的作用是为另一个输出流对象提供缓冲功能。

    二、构造方法

    (一)、BufferedInputStream 

    (二)、BufferedOutputStream

    三、常用API

    (一)、BufferedInputStream 

    (二)、BufferedOutputStream

    四、缓冲功能

    (一)、BufferedOutputStream

    BufferedOutputStream 为其它输出流提供缓冲功能。创建BufferedOutputStream 时,我们会通过它的构造函数指定某个输出流为参数。通过字节数组来缓冲数据,当缓冲区满或者用户调用 flush() 函数时,它就会将缓冲区的数据写入到输出流中。

    (二)、BufferedInputStream

    BufferedInputStream的作用是为其它输入流提供缓冲功能。创建BufferedInputStream时,我们会通过它的构造函数指定某个输入流为参数。BufferedInputStream会将该输入流数据分批读取,每次读取一部分到缓冲中;操作完缓冲中的这部分数据之后,再从输入流中读取下一部分的数据。缓冲中的数据实际上是保存在内存中,从内存中读取数据的速度更快从而提高性能。

    分批读取而不一次性读取的好处:

    • 缩短读取时间,提高读取性能。
    • 减少内存空间占用。

    五、实例

    private static final byte[] buffer = "abcdefghijklmnopqrstvuwxyz".getBytes();
    public static void main(String[] args) {
      write();
      read();
    }
    
    /**
     * BufferedOutputStream 测试
     */
    public static void write() {
      BufferedOutputStream out = null;
      try {
        out = new BufferedOutputStream(new FileOutputStream(new File("test.txt")));
        out.write(buffer);
      } catch (Exception e) {
        e.printStackTrace();
      } finally {
        try {
          if (out != null)
            out.close();
        }catch (Exception e) {
          e.printStackTrace();
        }
      }
    }
    
    /**
     * BufferedInputStream 测试
     */
    public static void read() {
      BufferedInputStream in = null;
      byte[] bu = new byte[10];
      int len = 0;
      try {
        in = new BufferedInputStream(new FileInputStream(new File("test.txt")));
        int temp = in.read();// 获取单字节数据
        System.out.println("temp : " + (char)temp);
                
        in.mark(5);// 标记第五个元素
        in.skip(10);// 跳过10个字节 
                
        len = in.read(bu,0,5);// 获取5字节数据
        System.out.println("bu : " + new String(bu,0,len));
                
        in.reset();// 重置
                
        len = in.read(bu,0,5);// 获取5字节数据
        System.out.println("bu : " + new String(bu,0,len));
      } catch (Exception e) {
        e.printStackTrace();
      } finally {
        try {
          if (in != null)
            in.close();
        }catch (Exception e) {
          e.printStackTrace();
        }
      }
    }
  • 相关阅读:
    LeetCode(1): 两数之和
    LeetCode(2): 两数相加
    目标检测
    图像语义分割
    Python的图像库
    Caffe
    Layers Of Caffe
    Solver Of Caffe
    ORA-01144_表空间数据文件超出最大限制
    ORA-01654_TableSpace空间不足问题处理
  • 原文地址:https://www.cnblogs.com/lingq/p/12924901.html
Copyright © 2011-2022 走看看