当前位置:网站首页>GZIPInputStream 类源码分析
GZIPInputStream 类源码分析
2022-07-31 09:40:00 【51CTO】
这是 《水煮 JDK 源码》系列 的第4篇文章,计划撰写100篇关于JDK源码相关的文章
GZIPInputStream
类位于 java.util.zip
包下,继承于 InflaterInputStream
类,它实现了一个流式过滤器,主要用于读取GZIP文件格式的压缩数据,其UML类图如下:
类声明如下:
1、成员变量
GZIPInputStream
定义了3个成员变量,分别如下:
2、构造函数
创建 GZIPInputStream
压缩输入流主要有以下的两种方式:
由于 GZIPInputStream
是由于读取压缩数据的输入流,因此需要用到解压缩器 Inflater
。
3、读取数据方法
GZIPInputStream
主要提供了1个用于读取流数据的方法,如下:
在读取数据之前,需要先检查流是否被关闭,如果流已经被关闭了,说明是不可读的,ensureOpen()
方法就是作此用途,其定义如下:
在创建 GZIPInputStream
输入流的时候,需要去读取 GZIP 的成员头信息,readHeader()
方法定义如下:
在读取数据的时候,需要读取GZIP的尾部信息,并以此来判断是否已读取结束了,readTrailer()
方法如下:
不论是在读取头信息或者尾信息的时候,都会去读取指定的标识位长度,比如 readUInt
、readUShort
、readUByte
方法,分别用于读取无符号整型、无符号短整型、无符号字节数据,其定义如下:
4、其他方法
在读取压缩数据流的时候,也可以跳过指定的字节数,其方法定义如下:
GZIPInputStream
的 close()
方法如下:
边栏推荐
猜你喜欢
随机推荐
Scala basics [seq, set, map, tuple, WordCount, queue, parallel]
服务器上解压文件时提示“gzip: stdin: not in gzip format,tar: Child returned status 1,tar: Error is not recovera“
matlab常用符号用法总结
【节选】吴恩达给出的AI职业生涯规划
怎样修改MySQL数据库的密码
[NLP] Interpretation of Transformer Theory
Echart饼图添加轮播效果
多个js雷达图同时显示
【NLP】Transformer理论解读
djangoWeb应用框架+MySQL数据4
MySQL 高级(进阶) SQL 语句 (一)
开放麒麟 openKylin 自动化开发者平台正式发布
Define event types in Splunk Web
Linux 创建mysql数据库并创建账号密码
【机器学习】用特征量重要度(feature importance)解释模型靠谱么?怎么才能算出更靠谱的重要度?
MySQL (2)
js以变量为键
解决rpc error: code = Unimplemented desc = method CheckLicense not implemented
来n遍剑指--07. 重建二叉树
@RequestBody和@RequestParam区别