当前位置:网站首页>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
类可以用来压缩数据,那么下面给出一个压缩字符串的示例代码:
运行程序后,由于是压缩后的字符串,所以输出打印的是乱码。
边栏推荐
- 生命周期和作用域
- Leetcode73. Matrix Zeroing
- Clip-on multimeter use method, how to measure the voltage, current, resistance?
- odoo coding conventions (programming conventions, coding guidelines)
- Go iota关键字与枚举类型实现原理是什么
- [National Programming] "Software Programming - Lecture Video" [Zero Basic Introduction to Practical Application]
- Three solutions: npm WARN config global --global, --local are deprecated. Use --location=global instead.
- Map传值
- 日志工厂(详细)
- LeetCode 0151. Reverse a string of words
猜你喜欢
随机推荐
亚马逊云科技Build On2022技能提升计划第二季——揭秘出海爆款新物种背后的黑科技
What is the implementation principle of Go iota keyword and enumeration type
MySQL Lock wait timeout exceeded; try restarting transaction 锁等待
【LeetCode】Day109-the longest palindrome string
WinRAR | 将多个安装程序生成一个安装程序
如何让固定点的监控设备在EasyCVR平台GIS电子地图上显示地理位置?
粒子滤波 particle filter —从贝叶斯滤波到粒子滤波——Part-I(贝叶斯滤波)
Leetcode72. 编辑距离
Summer vacation second week wrap-up blog
QT_Event class
Review实战经典:2 种封装风格,你偏爱哪种?
【Error】Uncaught (in promise) TypeError: Cannot read properties of undefined (reading ‘concat’)
QT_QThread thread
Prometheus的Recording rules实践
C#/VB.NET:从 PDF 文档中提取所有表格
University of California | Inverse Reinforcement Learning from Different Third-Person Videos via Graph Abstraction
2022年 PHP面试问题记录
【Day_08 0426】两种排序方法
LeetCode 0152. Product Maximum Subarray: dp + Roll in Place
Leetcode73. 矩阵置零