当前位置:网站首页>GZIPOutputStream 类源码分析
GZIPOutputStream 类源码分析
2022-08-01 18:44:00 【51CTO】
这是 《水煮 JDK 源码》系列 的第5篇文章,计划撰写100篇关于JDK源码相关的文章
GZIPOutputStream 类位于 java.util.zip 包下,继承于 DeflaterOutputStream 类,它实现了一个流式过滤器,主要用于以GZIP文件格式写入压缩数据,其UML类图如下:

类声明如下:
1、成员变量
GZIPOutputStream 定义了1个成员变量,如下:
CRC32 是一个计算数据流的 CRC-32 校验和的类,主要用来验证压缩数据的完整性的。
2、构造函数
创建 GZIPOutputStream 压缩输出流主要有4种方式,如下:
GZIPOutputStream 类主要是用于写入GZIP压缩数据的输出流,因此需要用到压缩器 Deflater。
3、写入数据方法
GZIPOutputStream 类提供了一个写入数据的方法,其定义如下:
在创建 GZIPOutputStream 压缩输出流的时候,会使用 writeHeader() 方法写入GZIP成员头信息,那么具体会写入哪些头信息呢?可以看看该方法的定义:
从代码实现可以看出,一共会写入10个字节的头信息,包括头信息魔法数、压缩方法和各种标志等,这些头信息在解压缩的时候也是需要一一校验的。
有写头信息的方法,自然就会有写尾信息的方法,关于写尾信息的 writeTrailer() 方法定义如下:
上面调用的 writeInt() 方法定义如下:
4、其他方法
当压缩的数据都写入到输出流中时,这个时候可以调用完成 finish() 方法,如下:
5、测试应用
GZIPOutputStream 类可以用来压缩数据,那么下面给出一个压缩字符串的示例代码:
运行程序后,由于是压缩后的字符串,所以输出打印的是乱码。
边栏推荐
- opencv syntax Mat type summary
- 【Day_08 0426】求最小公倍数
- QT_Event class
- 8月微软技术课程,欢迎参与
- 【Day_10 0428】井字棋
- MySQL 45 Talk | 09 How to choose common index and unique index?
- 粒子滤波 particle filter —从贝叶斯滤波到粒子滤波——Part-I(贝叶斯滤波)
- Detailed explanation of DBPack SQL Tracing function and data encryption function
- LeetCode 0152. 乘积最大子数组:dp + 原地滚动
- 【Day_08 0426】两种排序方法
猜你喜欢

Leetcode73. Matrix Zeroing

MySQL中超键、主键及候选键的区别是什么

The life cycle and scope

ExcelPatternTool: Excel表格-数据库互导工具

Leetcode72. Edit Distance

MySQL database - stored procedures and functions

Screen: GFF, OGS, Oncell, Incell of full lamination process

30分钟成为Contributor|如何多方位参与OpenHarmony开源贡献?

C#/VB.NET: extracted from the PDF document all form

XML配置
随机推荐
[pyqt5] Custom controls to achieve scaling sub-controls that maintain the aspect ratio
金鱼哥RHCA回忆录:CL210管理OPENSTACK网络--网络配置选项
odoo 编码规范(编程规范、编码指南)
Multi-Party Threshold Private Set Intersection with Sublinear Communication-2021:解读
QT_Event class
JVM运行时数据区与JMM内存模型是什么
483-82 (23, 239, 450, 113)
SQL function TO_DATE (2)
Zabbix6.0钉钉机器人告警
暑假第二周总结博客
阿里云的域名和ip绑定
COS 用户实践征文
Multi-Party Threshold Private Set Intersection with Sublinear Communication-2021:解读
How to solve the dynamic binding of el-form-item prop attribute does not take effect
首篇 NLP 领域图神经网络综述:127 页,从图构建到实际应用面面观
The elder brother of the goldfish RHCA memoirs: CL210 experiment management it network - chapter
AntDB数据库亮相24届高速展,助力智慧高速创新应用
消息模板占位符的使用
Break the performance ceiling!AsiaInfo database supports more than 1 billion users, with a peak of one million transactions per second
国标GB28181协议EasyGBS平台兼容老版本收流端口的功能实现