java zlib c 解压缩_zlib数据格式及解压缩实现

本文介绍了zlib数据的魔术头及其在JAVA和C++中的解压缩方法。通过示例展示了JAVA中使用InflaterInputStream进行解压缩,以及C++中使用zlib库实现解压缩的过程。
摘要由CSDN通过智能技术生成

0x01 zlib和其他压缩的魔术头

一般来说压缩文件都有个魔术头,用于区分不同的压缩文件对应不同的解压缩算法。

7z文件:

00000000 37 7A BC AF 27 1C 00 03 CD F7 CC 2E 66 6A 33 00 7z集' 枉?fj3

tar.xz文件

00000000 FD 37 7A 58 5A 00 00 04 E6 D6 B4 46 02 00 21 01 ?zXZ 嬷碏 !

zip和apk文件

00000000 50 4B 03 04 14 00 00 00 08 00 A7 AD CF 48 D5 52 PK Л螲誖

rar文件

00000000 52 61 72 21 1A 07 00 CF 90 73 00 00 0D 00 00 00 Rar! ?s

zlib文件

00000000 78 01 ED 9D 0B 94 1C 57 79 E7 AB A6 9F 33 9A 99 x ? ?Wy绔3殭

0x02 zlib在JAVA和c++的不同解压方法

JAVA:

public static byte[] decompress(byte[] compress) throws Exception {

ByteArrayInputStream bais = new ByteArrayInputStream(compress);

InflaterInputStream iis = new InflaterInputStream(bais);

ByteArrayOutputStream baos = new ByteArrayOutputStream();

int c = 0;

byte[] buf = new byte[BUFFER_SIZE];

while (true) {

c = iis.read(buf);

if (c == EOF)

break;

baos.write(buf, 0, c);

}

baos.flush();

return baos.toByteArray();

}

C++

#include

#include

#include

#include "zlib.h"

#if defined(MSDOS) || defined(OS2) || defined(WIN32) || defined(__CYGWIN__)

# include

# include

# define SET_BINARY_MODE(file) setmode(fileno(file), O_BINARY)

#else

#

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值