千家信息网

java缓冲输出流的方法是什么

发表于:2024-10-05 作者:千家信息网编辑
千家信息网最后更新 2024年10月05日,本篇内容介绍了"java缓冲输出流的方法是什么"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!BFOS
千家信息网最后更新 2024年10月05日java缓冲输出流的方法是什么

本篇内容介绍了"java缓冲输出流的方法是什么"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

BFOS 的构造需要传入一个字节输出流。

基本用法

这个流的功能可以根据名字看出来,是一个缓冲输出流,可以当做一个缓冲区,将输出的字节暂时存在缓冲区里,那么当缓冲区满了之后干嘛呢?那就需要将缓冲的数据都刷出去,刷到另一个流,因此在构造的时候就需要传入一个流。

有点类似游泳池,水满了,就将水全部放掉,再灌新水。为了将水放掉,就需要给一个输出的目的地,这个目的地就是构造方法中需要传入的下游的输出流。其默认的缓冲区大小是 8KB。

注意这个过程,当写到8KB时,数据还存在 BFOS 中,只要再写一个字节,就将之前缓冲满的全部刷出去。如果缓冲区还没满就想将数据写出去,需要手动 flush。

完整示例如下,这里我们的下游流用了个内存数组流,并随时查看内存数组流的数据量。

运行结果:

0
8192
8195

之前介绍过列式存储文件格式:大数据的列式存储格式:Parquet

每一列的数据需要在内存中用一个缓冲区管理,如果文件只有一列,那就需要一个缓冲区,如果文件有多列,则需要多个缓冲区。在这里我们用单缓冲区多缓冲区来区分。之前我们的缓冲区用的是 BAOS,参考 java 字节流入门(内存数组流->文件流)。那用 BFOS 可不可以?

单缓冲区

假如我们在内存中只需要维护一个缓冲区的数据,即一个字节数组。当我们想写磁盘时,需要将 FOS 包装一层 BAOS 或 BFOS,为了防止过多小数据量的写操作,因此在内存中做个缓冲,将很多小数据量写操作转化成很少的大数据量写操作,充分利用磁盘的IO。

先比比速度,BFOS+FOS vs BAOS + FOS (内存中只维护一个 BAOS 或一个 BFOS ,并接一个文件输出流)哪种比较快?

做了个实验,将800M数据通过两种方式写到文件中:

BufferedOutputStream + FileOutputStream

ByteArrayOutputStream + FileOutputStream

结果:BFOS + FOS 胜出。

BFOS 比 BAOS 还有一个好处,那就是可以控制内存使用,不会无限制占用内存。这是在单个数据缓冲区的时候,即内存中只有一份缓冲数据。

多缓冲区

假如内存中需要维护多个缓冲区,每份缓冲区负责不同的数据,对应到列式存储中就是两列,都需要写到一个文件中,那么 BFOS+FOS 和 BAOS+FOS 这两种搭配有啥区别?

由于 BFOS 的刷文件是由缓冲区满触发的,我们用橙色和红色区分两个缓冲流。假如缓冲流的缓冲区大小为 8KB,每个缓冲流都接收了 24KB 的数据,但是数据并不是均匀来的,因此刷到文件中的顺序是不固定的,也就是每个流会随机触发 3 次 flush。图中 File 里每一小段是 8KB。两个流最多需要的内存是 16KB。

而使用 BAOS + FOS,假如需要明确将红黄两种数据分开存储,不能互相交叉,则最多需要在内存中缓存 48KB 数据,等一个流缓冲了 24KB 后再写文件。这样就可以将红黄两种数据分隔开,但是先后顺序不确定。

如果将红黄分开是功能要求,在这种场景下,就必须使用 BAOS。

"java缓冲输出流的方法是什么"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!

缓冲 数据 缓冲区 内存 文件 输出 字节 数组 存储 方法 就是 两个 内容 功能 只有 多个 大小 时候 更多 格式 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 企业信息网络安全产品 部队网络安全专题心得体会 奥维服务器链接数据库 我的世界服务器一直生成世界 啥叫数据库本身被破坏 疫情期间网络安全风险上升 软件开发对企业信息化的影响 为什么黎明觉醒现在进不去服务器 计算机网络安全技术第六版慕课 怎么让数据库主键编号 centos7搭建站群服务器 求生之路2服务器出租 软件开发的发展战略 河南省万企惠网络技术有限公司 嵌入式软件开发是什么专业 数据库对象的集合是什么 基因数据库数据抓取 为什么苹果七无法接通激活服务器 密云区综合软件开发创新服务 c c s 远程数据库 校园网络安全宣传周活动总结报告 大学计算机网络技术买什么电脑 网络安全和防疫的手抄报 图数据库树形导航 苏州安卓软件开发哪家专业 怎么遵守网络安全法 《光网络技术》 枣庄市网络安全执法案 数据库中位函数什么意思 idc网络安全法行政处罚
0