如何在一个压缩数据流中解压缩出指定原始数据中偏移位置的一块数据?

dxl 2001-01-06 03:10:00
比如有200M数据,压缩后得到100M的数据文件。要求在压缩后的数据中读出在原来200M
数据中偏移195M地方的100个字节数据,如何实现?可采用那一种压缩算法?请各位大虾
多多指教。
...全文
502 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Kevin_qing 2001-01-10
  • 打赏
  • 举报
回复
压缩算法一般是分块计算的,拟可以根据块的信息跳过部分数据,直到找到某块包含你所需数据的部分或者全部,在解压该块即可得到数据。
比如设有一数据流in;我们需要解压offset开始的128字节。
0.计数器Cur=0;
1.读in,查找记录该块解压后大小的记录nSize。
2.cur+=nSize;
3;if(cur>offset) goto 4;否则从in读到信息里面找到下一个块记录的地址,in=下一个块记录的地址,goto 1.
4;解压该块并计数,储存offset后128字节数据。


其实还有简单但是效率很低的方法。即从头开始解压,把不需要的数据丢弃即可。

boldragon 2001-01-10
  • 打赏
  • 举报
回复
dxl:
我想这跟某种具体的压缩方法有关的,因为压缩后的数据一般而言,其前后的相关性是很大的。首先你得了解用的是那种压缩方法,然后才有可能在压缩数据中正确的寻址。一般来说,压缩后的数据是块状的(当然块长可能是可变的),首先按块寻址(找到块头,得到其块长),然后就可以在块内寻址,找出具体所需的数据,再解压出这部分数据。
sundayboys 2001-01-06
  • 打赏
  • 举报
回复
只有看了zip算法的原程序才行。
whoo 2001-01-06
  • 打赏
  • 举报
回复
建议你从压缩入手,如分段压缩等.
或者找一个WinZip的原码研究研究.

33,027

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧