SharpCompress智能手机文档压缩及解压的应用设计(3)
时间:2018-08-09 17:06 来源:毕业论文 作者:毕业论文 点击:次
关于语言选择,Html/Javascript的组合不利于手机较弱的机能,而C++则没有必要,因为 Windows Runtime底层API本身就是使用C++实现,C++和C#在调用API时,在底层都是一样的运行机制,因此与C#相比优势不大,而且可移植性不高。C#语言已经十分成熟,它拥有着Java尚不能及的特性,也能做到一定的跨平台,相比之下,Xaml/C#的组合兼顾了兼容性和性能,是比较合适的方案。 我个人使用的环境为Windows 8.1 Pro + Visual Studio 2013 Professional,使用Xaml/C#语言为Windows Phone编写Runtime应用。 1.4 数据压缩技术简介 在计算机科学和信息论中,数据压缩或者源编码是按照特定的编码机制用比未经编码少的数据位元(或者其它信息相关的单位)表示信息的过程。无损数据压缩,指数据经过压缩后,信息不受损失,还能完全恢复到压缩前的原样,常用于文件的压缩、网络传输数据的压缩等;有损数据压缩,是经过压缩、解压的数据与原始数据不同但是非常接近的数据压缩方法,如EG图像等。 下文所述“压缩”,除特别说明外,都指“无损数据压缩”。 智能手机就是一种便携式计算机。在计算机中存储数据时,将文件进行压缩,这样既能够节省存储空间,又能够缩短磁盘I/O操作的时间。 但这样也许会带来另外一个问题:压缩和解压会消耗CPU资源。然而如今计算机最大的短板并不在于CPU,而在于磁盘I/O。契合着摩尔定律,CPU的速度提升非常之快,以至于在很多时候计算机其实是性能浪费的,但磁盘I/O速度却相对提升较慢。把磁盘的I/O的压力转移到CPU上,有利于提升系统总体运行速度。合理使用压缩和解压技术,能够有利于获得整体性能的提升。 1.4.1 无损压缩算法 常用无损压缩技术有字典编码(如LZW算法等)、熵编码(如霍夫曼编码、算术编码等,一般与其它编码器联合使用)、分布式信源编码等。目前最主流的ZIP等算法等就属于字典编码,字典编码的根据是数据本身包含有重复代码这个特性。 Jacob Ziv和Abraham Lempel是两位著名的以色列计算机科学家,他们开发了LZ家族无损数据压缩算法,成为大多数LZ算法变体的基础。1977年,他们发表了一篇论文《A Universal Algorithm for Sequential Data Compression》,这个压缩算法称为LZ77。第二年他们又提出了一个类似的算法,称为LZ78。LZ家族压缩算法还有很多变种,如LZW、LZO、LZMA、LZSS、LZR、LZB、LZH、LZC、LZT、LZMW、LZJ、LZFG等等。 著名的ZIP算法deflate就是基于LZ77的思想演变过来的,它几乎运行于世界上每一台计算机。它的作者是美国程序员Phil Katz。1986年,bbs网站非常受欢迎,由于当时的存储空间和网络带宽限制,往往需要对数据进行压缩。那时普遍使用的是付费商业软件ARC,于是他开发出一种比ARC更好、且与它兼容的压缩软件PKARC。PKARC的编程使用了汇编语言,比使用C语言的ARC快得多,PKARC压缩软件因此很快流行开来。但涉及版权问题,Phil Katz曾因此被告上法庭并坐牢。后来Phil Katz创建了PKWARE公司并又研发出PKPAK。在PKPAK之后,Phil Katz又研发出新一代的产品PKZIP(ZIP),不仅免费,而且开源。如果现在用UltraEdit打开ZIP文件,我们能看到开头的两个字节,就是PK两个字符的ASCII码。 一度非常受欢迎的RAR格式,其编码算法是压缩比最高的算法之一,它是一种专有算法,享有专利,但发行时附送解码器允许解码器再开发,因此我们一般在其它压缩软件中无法压缩为RAR格式,只能解压。 近几年非常流行的7-Zip是一个开源的数据压缩程序,.7z格式最常采用的就是由LZ家族算法演变过来的LZMA算法。LZMA的压缩比甚至高于RAR。7-Zip由Igor Pavlov于1999年开始发展,并把主体在GNU LGPL下发布。 (责任编辑:qin) |