欢迎讨论文件分卷压缩的原理--或者是巨大文件的压缩原理 ( 积分: 100 )

  • 主题发起人 主题发起人 有畏
  • 开始时间 开始时间

有畏

Unregistered / Unconfirmed
GUEST, unregistred user!
近日碰到一个难题:如何压缩一个巨大文件?比如文件有一个G,此时如何使用DELPHI压缩?不至于创建一个文件流,来直接压缩这一个G的文件吧?这样的话内存不就被他耗光了?所以我就想到了WINRARA是如何实现对大文件进行压缩的?分卷压缩难道就是先读取为压缩文件的某一段(比如20M)来压缩,存放到文件,然后再读取下一段来压缩吗?这样的话解压缩如何处理呢?那肯定也是分段解压缩的了?

请大脚指教!!!!
 
近日碰到一个难题:如何压缩一个巨大文件?比如文件有一个G,此时如何使用DELPHI压缩?不至于创建一个文件流,来直接压缩这一个G的文件吧?这样的话内存不就被他耗光了?所以我就想到了WINRARA是如何实现对大文件进行压缩的?分卷压缩难道就是先读取为压缩文件的某一段(比如20M)来压缩,存放到文件,然后再读取下一段来压缩吗?这样的话解压缩如何处理呢?那肯定也是分段解压缩的了?

请大脚指教!!!!
 
当然是分段压缩的,否则你有那么大的内存么?
先读出一段数据,然后选择一种压缩方法进行压缩,将压缩结果加到压缩文件之后。
在进行下一段数据的压缩,如此循环直到结束。最后将CRC加到末尾。
 
我现在最难理解的是如何记录压缩过程?每一个20M段落的压缩结果不会一样长,那势必需要额外记录每一个段落的压缩结果存放的起始位置和长度的记录,然后解压也需要读取这些记录,与直接完全压缩一个一般的几M的文件相比,感觉特别繁琐!
 
那些烦琐的事由计算机去做啊,你只要写出怎么压缩就行了。而且进行分段压缩,可以多线程同时进行的,这样大大可以提高压缩效率的。
 
微软的ntfs压缩我好像看见这么一句,系统将尝试压缩每一段数据到原来大小的3/2,成功则压缩,不成功则放弃,(意思差不错,原话忘了-.-!~~~)
以下是个人看法
应该是建立一个压缩段索引..

实际上个人感觉有个软件是不分段压缩的.....
不过压缩比是高的吓人,大字典+全局扫描...
不过那个速度实在无法忍受....

分段压缩的另外一个好处...可以只解压需要的部分....同样可以添加需要的部分..
 
是哪个?uharc?还是那个以src形式提供的压缩算法?
 
WinRar使用的是字典压缩算法,就是将文件分为很多的段,每一段有一个压缩字典,Winrar中字典的大小一般是2048Kb,我建议你去看一下<<数据压缩原理>>,<<Delphi数据结构与算法>>里面有提到这些问题的,<<数据压缩原理>>给的很详细的算法.
 
我做了一个压缩程序,每2M打一个标记,很好用的再大都可以
 
多人接受答案了。
 
后退
顶部