当前位置:网站首页>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() 方法如下:
边栏推荐
- Binary tree search and backtracking problem (leetcode)
- loadrunner-Controller负载测试-各模块功能记录01测试场景设计
- 一次Spark SQL线上问题排查和定位
- 利用frp服务器进行内网穿透ssh访问
- 富文本编辑器Tinymce
- js雷达图统计图表插件
- (selenium)Service geckodriver unexpectedly exited. Status code was: 64
- vue element form表单规则校验 点击提交后直接报数据库错误,没有显示错误信息
- 02 Truffle TutorialToken 示例
- 【软考软件评测师】2012综合知识历年真题
猜你喜欢

Principle of Redis Sentinel

HTC官方RUU固件提取刷机包rom.zip以及RUU解密教程

PyQt5快速开发与实战 9.4 Matplotlib在PyQt中的应用

服务器上解压文件时提示“gzip: stdin: not in gzip format,tar: Child returned status 1,tar: Error is not recovera“

如何在 TiDB Cloud 上使用 Databricks 进行数据分析 | TiDB Cloud 使用指南

多个js雷达图同时显示

Redis集群-哨兵模式原理(Sentinel)

【NLP】Transformer理论解读

51单片机-----外部中断

利用frp服务器进行内网穿透ssh访问
随机推荐
js部门预算和支出雷达图
Flink1.15源码阅读——PER_JOB vs APPLICATION执行流程
(selenium)Service geckodriver unexpectedly exited. Status code was: 64
Kotlin—基本语法(三)
一次Spark SQL线上问题排查和定位
【软考软件评测师】2012综合知识历年真题
MySQL----多表查询
Kotlin—基本语法 (五)
js空气质量aqi雷达图分析
来n遍剑指--07. 重建二叉树
MySQL 视图(详解)
Data Middle Office Construction (6): Data System Construction
Come n times - 09. Implement queues with two stacks
Come n times with the sword--05. Replace spaces
JSP page对象简介说明
(C语言基础)原样输入输出
The big-eyed Google Chrome has also betrayed, teach you a trick to quickly clear its own ads
Binary tree search and backtracking problem (leetcode)
postgresql 范围查询比索引查询快吗?
Mysql+Navicat for Mysql