Java解析魔兽争霸3录像W3G文件(二):压缩数据块解压合并

这篇博文介绍了如何解析和处理魔兽争霸3录像(W3G)文件中的压缩数据块,通过Java实现解压缩并合并成原始数据。每个数据块包含8字节Header和压缩数据,使用Inflater进行解压缩。最终,所有解压缩的数据块合并后的字节数为114688。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

上一篇博文中,分析了魔兽争霸3录像W3G文件的Header部分的解析。Header部分占文件的前68个字节,紧接着Header之后,也就是从68字节之后,就是多个压缩数据块。压缩数据块的个数保存在Header中,也就是Header的45~48字节。

所有的压缩数据块中的数据实际上是一个整体,被分割成很多块。录像文件生成的时候,将原始的数据按8K(8192字节)分割成很多段,最后一段如果不足8K则补0,然后将每一段zlib压缩,生成一个压缩数据块,在每一段前面加上压缩数据块的Header(注意,这里所指的Header不是整个录像文件的Header,而是每个压缩数据块的Header)。

所以这里要做的就是遍历每个压缩数据块,解压缩后再合并,这样才能还原成原始的数据。


每个压缩数据块的结构:

每个压缩数据块,由Header和压缩数据组成。Header部分总共是8个字节,而压缩数据的字节数大小保存在每一个压缩数据块的Header中。

1~2字节(2个字节):压缩数据的字节数,小字节序。
3~4字节(2个字节):解压后数据的字节数,固定的值是8192(8KB),小字节序。
5~8字节(4个字节):未知。
9~(n-8)字节(n个字节):压缩数据(压缩数据的字节数n就是Header部分1~2字节中的字节数)。

Java处理压缩数据块:

定义一个CompressedDataBlock类用来处理每一个压缩数据库,包括解析压缩数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值