当前位置:网站首页>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() 方法如下:
边栏推荐
猜你喜欢

Pytorch学习记录(七):自定义模型 & Auto-Encoders

Binary tree search and backtracking problem (leetcode)

第六章

VMware下安装win10

loadrunner-controller-手动场景Schedule配置

Come n times with the sword--05. Replace spaces

Canvas particles change various shapes js special effects

Kotlin入门介绍篇

作为面试官,关于线程池的问题我一般这样套路...

Redis Cluster - Sentinel Mode Principle (Sentinel)
随机推荐
&#x开头的是什么编码?
来n遍剑指--09. 用两个栈实现队列
踩水坑2 数据超出long long
Use turtle to draw buttons
【职场杂谈】售前工程师岗位的理解杂谈
win10镜像下载
js实现2020年元旦倒计时公告牌
JSP session的生命周期简介说明
5.for in 和 for of区别和使用
优信年营收16亿:亏损3亿 已与蔚来资本及58集团签署股权协议
Browser usage ratio js radar chart
The fifth chapter
【节选】吴恩达给出的AI职业生涯规划
@RequestBody和@RequestParam区别
【NLP】Transformer理论解读
The big-eyed Google Chrome has also betrayed, teach you a trick to quickly clear its own ads
Redis集群-哨兵模式原理(Sentinel)
js implements the 2020 New Year's Day countdown bulletin board
Come n times - 07. Rebuild the binary tree
[ verb phrase ] collection