专业网站建设品牌,十四年专业建站经验,服务6000+客户--广州京杭网络
免费热线:400-683-0016      微信咨询  |  联系我们

怎么样把两个压缩文件压到一起_数据库

当前位置:网站建设 > 技术支持
资料来源:网络整理       时间:2023/3/5 13:57:04       共计:3602 浏览

怎么样把两个压缩文件压到一起?

简单回答一下,完全可以把多个文件看作一个文件进行压缩,也可以达到你说的压缩效果,但是慢!如果只是在实验室里做实验那是没有问题的,但是做成通用软件的时候需要考虑很多问题。

1. 算法的限制。像比较常用的LZ77,GZIP,snappy这种,在匹配相同字符串的时候是有窗口(history buffer)大小和最大匹配长度限制的。以你说的例子为例,你在遇到第二个100M的时候,你需要往前找100M的位置去找到这个匹配,但是匹配这个100M是需要代价的(包括消耗100M的内存和匹配100M长度所需要的时间),这样会使得压缩过程非常非常非常慢!其次是最大匹配长度问题,同理,在有限的时间内你不可能无限制地要求更长的匹配,都是有一个阈值的。一般情况下,匹配窗口大小通常是几KB到几MB这个级别(snappy是64KB),最大匹配长度就更小了。像LZ78、LZW这些基于字典的也会有字典大小和最大匹配长度问题,不再赘述。

2. 软件对压缩率和压缩速度的折中。简单说,压缩率越大,压缩速度越缦,反之亦然。主要看追求的是怎样的平衡。即便是一味追求压缩率,使用一个算法100M对100M的压缩代价还是很大的,还不如用多层压缩,比如说GZIP用了哈夫曼和LZ77结合。当然你也可以使用文件对文件的查重算法(各种云1秒上传电影的例子),但是这种只适合用在云备份上,暂时不适合用作多文件(量太少不实用,浪费资源)压缩打包。

3. 多文件压缩更倾向每个单独压缩,主要也是性能决定的。比如说你有16个文件要压缩,如果一开始分开压缩,那就可以调动16个线程一起压缩,时间会缩短16倍。然后再花一点时间把各个压缩之后的文件粘一起并添加上元数据。如果是一起压缩,由于压缩算法的并行比较困难,基本都是一个线程在工作(多线程的很多也是先把文件切割成多份,原理同上),这样会慢很多。解压也是一样的,单独压缩的文件可以调动多线程同时解压。另外,在解压时候如果我只需要其中一个文件,这种压缩方式就更有优势了,只需要读元数据并解只压需要的那部分文件,而不需要解压所有文件。

版权说明:
本网站凡注明“广州京杭 原创”的皆为本站原创文章,如需转载请注明出处!
本网转载皆注明出处,遵循行业规范,如发现作品内容版权或其它问题的,请与我们联系处理!
欢迎扫描右侧微信二维码与我们联系。
·上一条:mysql多表查询后相乘,全球每天消耗上百亿个二维码_数据库 | ·下一条:mysql每日记录查询,mysql怎么查询字符串中包含字符_数据库

Copyright © 广州京杭网络科技有限公司 2005-2025 版权所有    粤ICP备16019765号 

广州京杭网络科技有限公司 版权所有