遇到大文件有好几个混混遇到特种兵解压文件时 怎么解压

几百 MB 的文件,解压后达到几个 GB,这是怎么做到的?
高压缩文件是如何实现的?
加刘景长,中二病MAX
简要概述原理:
每个文件都由各种不同代码组成,比如 01 代码。这类文件只有数字 0 与 1 组合。
压缩原理就是&&通过寻找其中的规律,简化数字的排列。
可以简化成
5 个 0,2 个 1,3 个 0,10 个 1 的排列
可以简化成数学的
至于@yskin 说 没见过 2G 压缩到十几兆的。
实际上在极限压缩方式下其实 28.1G 压到 25.8M 都可以。
打开看后基本都能理解这个压缩的大概原理了。
下面是几种常见文件压缩算法原理介绍:
字典算法是最为简单的压缩算法之一。它是把文本中出现频率比较多的单词或词汇组合做成一个对应的字典列表,并用特殊代码来表示这个单词或词汇。例如:
有字典列表:
00=Chinese
源文本:I am a Chinese people,I am from China 压缩后的编码为:I am a 00 01,I am from 02。压缩编码后的长度显著缩小,这样的编码在 SLG 游戏等专有名词比较多的游戏中比较容易出现,比如《SD 高达》。
固定位长算法(Fixed Bit Length Packing)
这种算法是把文本用需要的最少的位来进行压缩编码。
比 如八个十六进制数:1,2,3,4,5,6,7,8。转换为二进制为:000100, 001000。每个数只用到了低 4 位,而高 4 位没有用到(全为 0),因此对低 4 位进行压缩编 码后得到:,,,。然后补充为字节得到:, 111000。所以原来的八个十六进制数缩短了一半,得到 4 个十六进制数:12,34,56,78。
这也是比较常见的压缩算法之一。
RLE(Run Length Encoding)
是一个针对无损压缩的非常简单的算法。它用重复字节和重复的次数来简单描述来代替重复的字节。尽管简单并且对于通常的压缩非常低效,但它有的时候却非常有用(例如,JPEG 就使用它)。
原理图 2.1 显示了一个如何使用 RLE 算法来对一个数据流编码的例子,其中出现六次的符号&93&已经用 3 个字节来代替:一个标记字节(&0&在本例中)重复的次数(&6&)和符号本身(&93&)。RLE 解码器遇到符号&0&的时候,它表明后面的两个字节决定了需要输出哪个符号以及输出多少次。
这种压缩编码是一种变长的编码,RLE 根据文本不同的具体情况会有不同的压缩编码变体与之相适应,以产生更大的压缩比率。
  变体 1:重复次数 + 字符
文本字符串:A A A B B B C C C C D D D D,编码后得到:3 A 3 B 4 C 4 D。
  变体 2:特殊字符 + 重复次数 + 字符
文本字符串:A A A A A B C C C C B C C C,编码后得到:B B 5 A B B 4 C B B 3 C。编码串的最开始说明特殊字符 B,以后 B 后面跟着的数字就表示出重复的次数。
  变体 3:把文本每个字节分组成块,每个字符最多重复 127 次。每个块以一个特殊字节开头。那个特殊字节的第 7 位如果被置位,那么剩下的 7 位数值就是后面的字符的重复次数。如果第 7 位没有被置位,那么剩下 7 位就是后面没有被压缩的字符的数量。例如:文本字符串:A A A A A B C D E F F F。编码后得到:85 A 4 B C D E 83 F(85H= B、4H= B、83H= B)
实现 RLE 可以使用很多不同的方法。基本压缩库中详细实现的方式是非常有效的一个。一个特殊的标记字节用来指示重复节的开始,而不是对于重复非重复节都 coding run。
因此非重复节可以有任意长度而不被控制字节打断,除非指定的标记字节出现在非重复节(顶多以两个字节来编码)的稀有情况下。为了最优化效率,标记字节应该是输入流中最少出现的符号(或许就不存在)。
重复 runs 能够在 32768 字节的时候运转。少于 129 字节的要求 3 个字节编码(标记 + 次数 + 符号),而大雨 128 字节要求四个字节(标记 + 次数的高 4 位|0x80+ 次数的低 4 位)。这是通常所有采用的压缩的做法,并且也是相比较三个字节固定编码(允许使用 3 个字节来编码 256 个字节)而言非常少见的有损压缩率的方法。
在这种模式下,最坏的压缩结果是:
输出大小=257/256* 输入大小 +1
其他还有很多很多变体算法,这些算法在 Winzip Winrar 这些软件中也是经常用到的。
霍夫曼编码(Huffman Encoding)
哈夫曼编码是无损压缩当中最好的方法。它使用预先二进制描述来替换每个符号,长度由特殊符号出现的频率决定。常见的符号需要很少的位来表示,而不常见的符号需要很多为来表示。
哈夫曼算法在改变任何符号二进制编码引起少量密集表现方面是最佳的。然而,它并不处理符号的顺序和重复或序号的序列。
原理我不打算探究哈夫曼编码的所有实际的细节,但基本的原理是为每个符号找到新的二进制表示,从而通常符号使用很少的位,不常见的符号使用较多的位。
简短的说,这个问题的解决方案是为了查找每个符号的通用程度,我们建立一个未压缩数据的柱状图;通过递归拆分这个柱状图为两部分来创建一个二叉树,每个递归的一半应该和另一半具有同样的权(权是&NK =1 符号数 k, N 是分之中符号的数量,符号数 k 是符号 k 出现的次数)
这棵树有两个目的:
1. 编码器使用这棵树来找到每个符号最优的表示方法
2. 解码器使用这棵树唯一的标识在压缩流中每个编码的开始和结束,其通过在读压缩数据位的时候自顶向底的遍历树,选择基于数据流中的每个独立位的分支,一旦一个到达叶子节点,解码器知道一个完整的编码已经读出来了。
我们来看一个例子会让我们更清楚。图 2.2 显示了一个 10 个字节的未压缩的数据。
根据符号频率,哈夫曼编码器生成哈夫曼树(图 2.4)和相应的编码表示(图 2.3)。
你可以看到,常见的符号接近根,因此只要少数位来表示。于是最终的压缩数据流如图 2.5 所示。
压缩后的数据流是 24 位(三个字节),原来是 80 位(10 个字节)。当然,我应该存储哈夫曼树,这样解码器就能够解码出对应的压缩流了,这就使得该例子中的真正数据流比输入的流数据量大。这是相对较短的数据上的副作用。对于大数据量来说,上面的哈夫曼树就不占太多比例了。解码的时候,从上到下遍历树,为压缩的流选择从左 / 右分支,每次碰到一个叶子节点的时候,就可以将对应的字节写到解压输出流中,然后再从根开始遍历。 实现哈夫曼编码器可以在基本压缩库中找到,其是非常直接的实现。
这个实现的基本缺陷是:
1. 慢位流实现
2. 相当慢的解码(比编码慢)
3. 最大的树深度是 32(编码器在任何超过 32 位大小的时候退出)。如果我不是搞错的话,这是不可能的,除非输出的数据大于 232 字节。
另一方面,这个实现有几个优点:
1. 哈夫曼树以一个紧密的形式每个符号要求 12 位(对于 8 位的符号)的方式存储,这意味着最大的头为 384。
2. 编码相当容易理解
哈夫曼编码在数据有噪音的情况(不是有规律的,例如 RLE)下非常好,这中情况下大多数基于字典方式的编码器都有问题。
3. Rice 对于由大 word(例如:16 或 32 位)组成的数据和教低的数据值,Rice 编码能够获得较好的压缩比。音频和高动态变化的图像都是这种类型的数据,它们被某种预言预处理过(例如 delta 相邻的采样)。
尽管哈夫曼编码处理这种数据是最优的,却由于几个原因而不适合处理这种数据(例如:32 位大小要求 16GB 的柱状图缓冲区来进行哈夫曼树编码)。因此一个比较动态的方式更适合由大 word 组成的数据。
原理 Rice 编码背后的基本思想是尽可能的用较少的位来存储多个字(正像使用哈夫曼编码一样)。实际上,有人可能想到 Rice 是静态的哈夫曼编码(例如,编码不是由实际数据内容的统计信息决定,而是由小的值比高的值常见的假定决定)。
编码非常简单:将值 X 用 X 个&1&位之后跟一个 0 位来表示。
实现在基本压缩库针对 Rice 做了许多优化:
1. 每个字最没有意义的位被存储为 k 和最有意义的 N-k 位用 Rice 编码。K 作为先前流中少许采样的位平均数。这是通常最好使用 Rice 编码的方法,隐藏噪音且对于动态变化的范围并不导致非常长的 Rice 编码。
2. 如果 rice 编码比固定的开端长,T,一个可选的编码:输出 T 个&1&位,紧跟(log2(X-T))个&1&和一个&0&位,接着是 X-T(最没有意义的(log2(X-T))-1 位)。这对于大值来说都是比较高效的代码并且阻止可笑的长 Rice 编码(最坏的情况,对于一个 32 位 word 单个 Rice 编码可能变成 232 位或 512MB)。
如果开端是 4,下面是结果编码表:
Thresholded
就像你看到的一样,在这个实现中使用 threshold 方法仅仅两个编码导致一个最坏的情况;剩下的编码产生比标准 Rice 编码还要短的编码。
最坏的情况,输出。
Lempel-Ziv (LZ77)
Lempel-Ziv 压缩模式有许多不同的变量。基本压缩库有清晰的 LZ77 算法的实现(Lempel-Ziv,1977),执行的很好,源代码也非常容易理解。
LZ 编码器能用来通用目标的压缩,特别对于文本执行的很好。
它也在 RLE 和哈夫曼编码器(RLE,LZ,哈夫曼)中使用来大多数情况下获得更多的压缩。这个压缩算法是有版权的。
原理在 LZ 压缩算法的背后是使用 RLE 算法用先前出现的相同字节序列的引用来替代。
简单的讲,LZ 算法被认为是字符串匹配的算法。例如:在一段文本中某字符串经常出现,并且可以通过前面文本中出现的字符串指针来表示。当然这个想法的前提是指针应该比字符串本身要短。
例如,在上一段短语&字符串&经常出现,可以将除第一个字符串之外的所有用第一个字符串引用来表示从而节省一些空间。
一个字符串引用通过下面的方式来表示:
1. 唯一的标记
2. 偏移数量
3. 字符串长度
由编码的模式决定引用是一个固定的或变动的长度。后面的情况经常是首选,因为它允许编码器用引用的大小来交换字符串的大小(例如,如果字符串相当长,增加引用的长度可能是值得的)。
实现使用 LZ77 的一个问题是由于算法需要字符串匹配,对于每个输入流的单个字节,每个流中此字节前面的哪个字节都必须被作为字符串的开始从而尽可能的进行字符串匹配,这意味着算法非常慢。
另一个问题是为了最优化压缩而调整字符串引用的表示形式并不容易。例如,必须决定是否所有的引用和非压缩字节应该在压缩流中的字节边界发生。
基本压缩库使用一个清晰的实现来保证所有的符号和引用是字节对齐的,因此牺牲了压缩比率,并且字符串匹配程序并不是最优化的(没有缓存、历史缓冲区或提高速度的小技巧),这意味着程序非常慢。
另一方面,解压缩程序非常简单。
一个提高 LZ77 速度的试验已经进行了,这个试验中使用数组索引来加速字符串匹配的过程。然而,它还是比通常的压缩程序慢。
当然静态数据和动态数据的压缩策略是完全不同的。
一个压缩文件是不是还可以用其他算法再继续压缩?
可以,但没要。压缩文件有极限值存在。高压一遍已经很接近这个值了,再压缩的话基本也就只有一丁点压缩率提升,甚至会增加体积。
随便做的渣绘图。不要在意细节& &
下面是题外话。
那么一般要如何简单实现高压缩?
系统文件诸如 GAL 游戏跟一些纯代码的文档基本能直接用 7Z 进行无损压缩就可以了。当然,高压缩率也意味着更费时间的压缩跟解压。压缩率小的没必要用 7z,直接打包反而更适合。
影音图像文件多数压缩率只能通过再编码有损压缩。比如 BMP 图像转 jpg 吧图片的一些一般人用不到的杂信息去除,APE 转 MP3 之类。基本除了音源文件外其他要对比不太明显。(照片 BMP 通过 7Z 压缩后解压其实是有点变化的,这个不细说,一说就没完没了了。)
至于有的人说我上面附带的极限压缩例子太坑爹,于是再附带一个我做的动画压制 1080p BDMV 通过 10bit x264 再编码压缩成每话 90M 大小视频。源 BDBOX 总大小 119.16GB。
画面的话我【个人主观看法】觉得在电脑观看跟源盘没什么区别。(PS3 跟一些高端硬件芯片的解码器播放那是另一回事了)
画面控追求的 BDMV 无损画质也是相对无损。真正意义上的无损画质输出的影片,渲染体积 1 分钟视频就超过 10G。我个人渲过最大的是 18 秒 44.5G 8k 视频。
客官,这篇文章有意思吗?您的举报已经提交成功,我们将尽快处理,谢谢!
问题出自于你的命名“01,02...24的顺序重新命名了”
改名为part01.rar、part02.rar…part24.rar
如果你的电脑里面安装winrar或winzip解压缩软件的话,就用右键点击这个压缩包,选择解压到当前文件夹就可以,解压后,双击带.exe的文件,这样就可以安装了...
我明白你的意思,有些文件需要补丁文件在其文件夹内,你可以这么做:先解压压缩文件A,解压出一个文件夹A,再解压另一个压缩文件B,解压出文件夹B,再将B文件夹里的内...
一般视频文件会采用视频的压缩格式而不会使用压缩软件来对他压缩。建议你不要对他解压,以免中病毒或木马。换一个地址从新下吧。
至于压缩好的文件可以...
绝对是硬件的问题,建议:
1、先取下网卡,有时是网卡的问题
2、并打开机箱清理灰尘,并把显卡、内存重新插拨
3、换个内存条试试
4、最后再考虑硬盘,如果...
大家还关注rar文件解压缩失败解压末端出现错误的解决方法
作者:佚名
字体:[ ] 来源:互联网 时间:04-23 11:31:06
一般出现最多的是“CRC”错误,就是在解压末端出现了错误,解决方法有很多,在本文将为大家一一介绍下
  附件经常会是一系列的压缩文件,下载是默认文件名是一个随机数字。
  因而下载完会出现压缩文件解压缩失败
  解决方法:下载时重命名为带一定顺序的文件名,如文件1,文件2,文件3等
  如何解决单个文件解压失败?
  论坛中的许多资料都是使用RAR压缩的,上传到下载,在解压过程中可能会出现错误。一般出现最多的是&CRC&错误,就是在解压末端出现了错误。主要的原因是:1.源文件就有压缩的错误;2. 下载的时候由于线程太多,在收尾的时候出现了错误;3.下载没有完全。
  解决的办法:一、修复。
  1、首先打开WinRAR主窗口,从地址栏转入受损压缩文件所在的目录,选中受损的压缩文件。
  2、用鼠标点击WinRAR工具栏上的&Repair&,然后在下拉菜单上选中&Repair archiver&,这时WinRAR会弹出一个对话框,让你选择修复文件的存放路径。
  3、设定好后点击&OK&确定,WinRAR就会开始对受损的压缩文件进行修复,并会以对话框的形式显示修复的全过程。
  4、进入你设定的修复文件的存放目录,你会发现该目录下增加了一个名为_reconst.rar或_reconst.zip的压缩文件,它就是WinRAR为你修复好的文件。试着对它进行解压缩,如果一切正常,那么恭喜你,你的受损的压缩文件已经修复了!
  需要说明的是,WinRAR内置的压缩文件修复功能并非对于所有受损的压缩文件都有效,对于那些受损严重的压缩文件,WinRAR也会变得无能为力,或者只能修复压缩包中的某些文件。
  我采用的方法很简单:在没有解压完(提示出错的情况下)拷贝文件到其它目录,等解压完成,OK,文件依然好用,这个方法应该是有针对性地,还是枚举一下网络的做法。
  网络的方法:
  办法一:WinRAR本身就带有压缩包修复功能。点击菜单&工具&下的&修复压缩文件&即可,快捷键是&ALT+R&。此法可修复一部分压缩包的常规错误,但是成功率不高。你可以试着连续修复几次。WinRAR的这个功能对压缩包里有很多文件且文件容量都比较小的情况比较适用。
  办法二: 打开压缩包(不是解压,而是用WinRAR打开),选中你要解压缩的文件,单击鼠标右键,在弹出的菜单里选择&无需确认直接解压缩&,快捷键是&ALT+W&。用此方法,不管是好的压缩包还是坏的压缩包,统统畅行无阻,成功率100%!
  办法三:釜底抽薪法!
  其原理就是让RAR压缩包内损坏的文件解压缩出来,不理会WinRAR的警告,能解压多少就解压多少。解压缩软件还是用WinRAR,不过要做小小的设置。
  在右键点击解压缩文件后跳出的窗口里,把&保留被损坏的文件&复选框选中,点击确定开始解压缩。不要理会解压缩出错的信息,解压缩结束之后你会发现损坏的文件被解压出来了。经过这样解压出来的损坏文件能正常使用的几率还是非常高的。
  做好保险工作
  1.做好恢复记录
  原始RAR压缩包在压缩时,如果选择放置恢复记录,这样用户下载后即使CRC出错也有自己修复的机会!
  2.采取分卷压缩
  采取分卷压缩的方法便可较大地减少因为出现不可恢复的错误带来的损失。
  3.老文件也加恢复记录
  有人也许会问,新压缩的RAR压缩包可以加入恢复记录,那么已经压缩过的RAR包有没有办法也加上恢复记录呢?给已经压缩好的RAR压缩包加上恢复纪录是有办法的。
  只需要打开压缩包,在&命令&菜单中选择&保护档案文件&即可。
  小常识:
  其实RAR压缩包出错的解决方法主要是以预防为主!如果没有预防,等到真正出了问题,技术上也是没办法完美解决的!像循环冗余校验码(CRC)出错这种情况,如果RAR压缩包不包含恢复记录的话,用户自己想要修复CRC是不可能的!本文的主要目的是想告诉大家一些出错的原因以及讨论一些从根本上预防出错和把损失减少到最小的办法而已!
  1.CRC算法原理
  CRC是Cyclic Redundancy Code的缩写,翻译成中文就是&循环冗余码&,它采用多项式编码方法,是一种高效的差错控制方法。所谓的CRC32也就是32位的CRC算法,这就是前面介绍的SFV采用的算法。由于CRC算法编码和解码方法简单,检错和纠错能力强,因此在通信、卫星、控制等领域都有着广泛的应用,在我们的电脑中,也被广泛应用于压缩,光盘刻录、数据存储等方面。
  其实说到CRC,大家更多想到的就是压缩软件,因为许多朋友都遇到过压缩软件提示&CRC错误&,这实际上就是一种文件校验过程,只不过这个过程被自动化了:压缩软件在压缩文件时自动在压缩包内添加CRC校验信息,在解压缩时会自动对CRC进行校验,检查文件是否完整和正确。
  实战:CRC错误的解决方法
  现象一:最近WinRAR不论解压缩什么文件,都是提示&CRC 校验失败,文件被破坏&。
  解决方案:出现这种情况,可能是WinRAR的临时文件保存出现了问题,一般只需要打开系统临时目录(Windows 2000/XP下为/Documents and Settings/用户名/Local Settings/Temp),删除其中名为&Rar$DI00.*&之类的文件夹即可。
  现象二:刚下载的一个软件压缩包,使用WinRAR解压时提示某个文件&CRC 校验失败,文件被破坏&。
  解决方案:这种情况可以判断是那个压缩包出了问题,但很多情况下出现CRC错误时并不代表整个压缩包都已经坏掉,很可能只是某个文件有部分损坏。你可以尝试使用&命令&菜单中的&修复压缩文件&,一般可以解决部分CRC错误的问题。如果仍然不能解决,你可以尝试一下强制解压技巧:首先打开压缩包,选择除那个CRC错误文件以外的所有文件,先将正常的文件解压出来,然后解压那个出错的文件,当提示CRC错误信息时,不要点击任何确认按钮,打开&资源管理器 &,找到解压后的文件保存路径,可以看到那个出错的文件实际已经被解压了,把它复制到其他文件保存的文件夹中,然后再试试看程序能否正常运行,很多情况下,如果这个文件不是可执行程序,对运行的影响不是很大。
  简单方便的WinRAR用户身份校验
  WinRAR本身除了具备CRC自动校验功能外,还为用户提供了专门的身份校验功能,可以帮助用户了解自己的压缩包是否被人修改过。
  实战:制作一个&只许用不许改&的压缩包
  在&资源管理器&中选择要压缩的文件,单击鼠标右键,选择&添加到压缩文件&,打开&压缩文件名和参数&窗口,勾选&压缩选项&中的&添加用户身份校验信息&选项,单击&确定&按钮生成压缩包。
  双击打开这个压缩包,可以在地址栏中看到&用户校验信息存在&的提示,单击菜单&命令&显示信息&打开对话框,在&用户身份校验信息&栏中可以看到该压缩包的文件名、创建者以及创建日期信息(见图1),记下这些信息,尤其是&创建者&中的信息。
  现在你可以把这个压缩包提供给接收方,并同时提供用户身份校验信息。当对方打开这个压缩包时,可以打开&显示信息&对话框,并与你提供的身份校验信息进行比对,如果完全一样的话,说明压缩包没有被修改过,如果身份校验信息不存在或者有了变化,则说明压缩包已经被修改过了。
  小提示
  该功能需要使用注册版的WinRAR,因为身份校验信息就是根据注册用户名来生成的,一个被添加了身份校验信息的压缩包被重新修改时,将丢失身份校验信息,这就是它的校验原理。
大家感兴趣的内容
12345678910
最近更新的内容}

我要回帖

更多关于 几个混混遇到特种兵 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信