首页 > 编程语言 >Java语言的过滤数据流

Java语言的过滤数据流

时间:2022-10-30 11:31:53浏览次数:52  
标签:Java 字节 buf 缓冲 缓冲区 过滤 数据流 数据

过滤数据流

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

Java语言的过滤数据流_输出流

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

缓冲区数据流

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

输入数据流(BufferedInputStream)

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

// BufferedInputStream类中部分字段说明
protected byte[]:buf存储数据的内部缓冲区数组,该数组的默认大小为2048字节

protected int :计算比缓冲区中最后一个有效字节的索引大1的索引

protected int :marklink调用mark方法后,再后续调用reset方法失败前所允许的最大提前读取量

···

输出数据流(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个有效字节数据写入缓冲输出流中。

Java语言的过滤数据流_数组_02

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

标签:Java,字节,buf,缓冲,缓冲区,过滤,数据流,数据
From: https://blog.51cto.com/u_15773567/5807488

相关文章

  • javascript:监控video全屏时取消静音(chrome 107.0.5304.87)
    一,js代码:<html><head><metacharset="utf-8"/><title>测试</title></head><body><divstyle="width:50%;height:100%;float:left;margin-left:-0.3px;pos......
  • java math和random注意项总结以及包装类
    Math功能:复杂的数学运算Random功能:用于产生随机数注意:固定种子生成随机数的序列是一样的(序列中的数字是不一样的)packagetest;publicclasstest8{publicstatic......
  • hive 报:java.net.NoRouteToHostException: 没有到主机的路由
    这种没有到主机的路由问题屡见不鲜了,一般要么是namenode与datanode主机名间本身互ping就ping不通,这个概率较小,因为都知道要保证master与slaves节点是能正常通信,所以都会......
  • java new Date() 获取的时间存到库里少了八个小时?
    javanewDate()获取的时间存到库里少了八个小时?javanewDate()获取的时间存到mysql库里少了八个小时? 在application.yml修改数据库配置为url:jdbc:mysql://localhost......
  • Java知识【XML知识】
    1.xml1.1概述【理解】万维网联盟(W3C)万维网联盟(W3C)创建于1994年,又称W3C理事会。1994年10月在麻省理工学院计算机科学实验室成立。建立者:TimBerners-Lee(蒂姆·伯纳斯......
  • Java性能分析工具
    概述工欲善其事必先利其器,在Java开源世界里面,有无以计数的工具。清单排名靠前的使用得多一些。MATEclipseMemoryAnalyzer,Eclipse内存分析器是一个可以帮助你找到内存泄漏......
  • Java String加解密踩坑
    背景最近在做一款数据产品,涉及到数据源。既然是数据源,肯定有URL(含port信息),用户名和密码。页面上面,虽然有前端组件mask处理,不能复制出来。但是对于稍微懂点技术的同学,都知道......
  • Javaweb基础复习------Filter相关应用+登录验证案例的使用
    Filter(过滤器)基本步骤:1、定义类,实现Filter接口,并重写其所有方法2、配置Filter拦截资源的路径,在类上定义2WebFilter注解(WebFilter配置的路径,是拦截资源的路径)3、在d......
  • Java多线程(6):锁与AQS(中)
    您好,我是湘王,这是我的博客园,欢迎您来,欢迎您再来~ Java中的AQS(AbstractQueuedSynchronizer,抽象队列同步器)是用来实现锁及其他同步功能组件的Java底层技术基础,java.util.co......
  • Java数组之合并方法(世界上最简单的方法)
    转自:http://www.java265.com/JavaJingYan/202204/16510261483156.html数组是日常开发中常用的容器,日常开发中,我们通常会定义多个数组,那么有时需要进行两个数组的合并操......