• Java语言的过滤数据流


    过滤数据流

    为了解决不同数据流之间速度、数据格式差异的问题,以便提高输入/输出操作的效率(特别是当需要大量的输入、输出操作的程序时),因此,Java贴心的提供了过滤流。 在已存在的数据流的基础上,过滤数据流与已经存在的数据流相联系,过滤流主要包括过滤输入数据流和过滤输出流。其中,过滤输入数据流从输入数据流中读取数据(以字节或者字符的形式存在),对这些数据进行加工处理,然后向内存提供特定格式的数据。而过滤输出数据流则是从内存中读取特定格式的数据,进行加工处理后,向输出数据流提供字节数据。

    • 过滤流主要包括缓冲区数据流、数据数据流、管道数据流、对象数据流等。

    缓冲区数据流

    缓冲区数据流相当于在数据流上增加一个缓冲区,字节(字符)数据到达缓冲数据流时,以块为单位进入缓冲数据流,其他数据流从该缓冲数据流中以字节(字符)的方读取数据 处理字节的缓冲区数据流包括缓冲区输入数据流(BufferedInputStream)和缓冲区输出数据流(BuffereredOutputStream)。另外,可以通过设定缓冲区的大小。控制输入输出操作的速度。

    输入数据流(BufferedInputStream)

    BufferedInputStream类的数据成员buf是一个位数组,默认2048字节。当读取数据来源时,BufferedInputStream会尽量将buf填满。当使用read()方法时,实际上是先读取buf中的数据,而不是直接对数据来源做读取。当buf中的数据不足时,BufferedInputStream才会再实现给定的InputStream对象的read()方法,即从指定的装置中提取数据。

    1. // BufferedInputStream类中部分字段说明
    2. protected byte[]:buf存储数据的内部缓冲区数组,该数组的默认大小为2048字节
    3. protected int :计算比缓冲区中最后一个有效字节的索引大1的索引
    4. protected int :marklink调用mark方法后,再后续调用reset方法失败前所允许的最大提前读取量
    5. ···

    输出数据流(BufferedOutputStream)

    BufferedOutputStream的数据成员buf是一个位数组,但它的默认字节数为512.当使用write()方法写入数据时,实际上会先将数据写至buf中,当buf满时才会实现给定的OutputStream对象的wrte()方法,将buf数据写至目的地,而不是每次都对目的地做写入的动作。

    BufferedOutputStream类的构造方法

    1. BufferedOutputStream(OutputStream outputStream[,int s]):创建以恶搞缓冲输出流,以将指定缓冲大小的数据写入指定的输出流。如果没有指定缓冲区大小,则使用默认的缓冲区大小(1024字节)。
    2. void flush():刷新此缓冲的输出流(与OutputStream相比,BufferedOutputStream 类才有此方法)
    • 注:在关闭缓冲输出数据流时,应该强制输出流缓冲输出数据流中的数据。否则,还有数据在缓冲区内没有完全读出来。

    • 一般情况下。缓冲输入流缓冲区大小、缓冲输出流缓冲区大小以及指定数组的大小是相等的。每次从缓冲输入流中读出来的有效数据保存于数据b中,并记录有效数据的长度len,然后将数组中的前len个有效字节数据写入缓冲输出流中。

       

    由于无法保证文件的实际长度是缓冲输入流缓冲区大小的整倍大小,最后一次写入缓冲区输入流时,不会把无效的数据写入缓冲数据流中。

  • 相关阅读:
    acwing322消木块
    Mac上安装Mysql8.0修改my.cnf配置文件(忽略大小写)
    【机器学习合集】泛化与正则化合集 ->(个人学习记录笔记)
    输入 3 个数 a、b、c, 求这 3 个数的最小公倍数
    设计模式笔记 ——1(结构体的私有属性)
    【华为笔试题汇总】2024-04-24-华为春招笔试题-三语言题解(Python/Java/Cpp)
    C#版字节跳动SDK - SKIT.FlurlHttpClient.ByteDance
    倒计时2天,“文化数字化战略新型基础设施暨文化艺术链生态建设发布会”启幕在即
    ES6之Symbol和Symbol属性
    【LeetCode刷题(数据结构)】:对称二叉树
  • 原文地址:https://blog.csdn.net/m0_57042151/article/details/127881209