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();
        }
      }
    }
  • 相关阅读:
    禁止google浏览器强制跳转为https
    遍历打印文件目录结构
    添加忽略文件
    部署git服务器
    Location, History, Screen, Navigator对象
    Window 对象
    回调函数,setTimeout,Promise
    闭包
    this
    函数内部运作机制—上下文
  • 原文地址:https://www.cnblogs.com/lingq/p/12924901.html
Copyright © 2011-2022 走看看