zoukankan      html  css  js  c++  java
  • 亲自尝试压缩数据

    问题

    1. 文件存储的基本单位是什么?

      1字节

    2. DOC、LZH和TXT这些扩展名中,哪一个是压缩文件的扩展名?

      LZH是用LHA等工具压缩过的文件的扩展名

    3. 文件内容用“数据的值×循环次数”来表示的压缩方法是RLE算法还是哈夫曼算法?

      RLE算法

    4. 在Windows计算机经常使用的SHIFT JIS字符编码中,1个半角英数是用几个字节的数据来表示的?

      半角英文数字是用1字节来表示的,汉字等全角字符是用2字节来表示的

    5. BITMAP格式的图像文件,是压缩过的吗?

      BMP格式的图像文件是没有被压缩过的,因此要比JPEG格式等压缩过的图像文件大不少

    6. 可逆压缩和非可逆压缩的不同点是什么?

      压缩后是否能复原。非可逆压缩的图像不会让人感到不自然。

    文件以字节为单位保存

    文件是将数据存储在磁盘等存储媒介中的一种形式。程序文件中存储数据的单位是字节。文件就是字节数据的集合。在任何情况下,文件中的字节数据都是连续存储的。

    RLE算法的机制

    把文件内容用“数据×重复次数”的形式来表示的压缩方法称为RLE算法(行程长度编码Run Length Encoding)。经常被用于压缩传真的图像等。它的缺点也很明显,不适合对文本文件进行压缩,因为文本文件中同样字符连续出现的部分并不多。

    通过莫尔斯编码来看哈夫曼算法的基础

    哈夫曼算法的关键就在于多次出现的数据用小于8位的字节数来表示,不常用的数据则可以用超过8位的字节数来表示。但不管是不满8位的数据,还是超过8位的数据,最终都要以8位为单位保存到文件中。为了实现这一处理,压缩程序的内容会复杂很多,不过作为回报,最终得到的压缩率也是相当高的。

    莫尔斯编码把一般文本中出现频率高的字符用短编码来表示。这里所说的出现频率,不是通过对出版物等文章进行统计调查得来的,而是根据印刷行业的印刷活字数目而确定的。

    用二叉树实现哈夫曼编码

    哈夫曼算法是指,为各压缩对象文件分别构造最佳的编码体系,并以该编码体系为基础来进行压缩。用哈夫曼算法压缩过的文件中,存储着哈夫曼编码信息和压缩过的数据。编码体系可以按照“出现频率高的字符用尽量少的位数编码来表示”这一原则进行整理。不过,这个编码体系是存在问题的。该问题就是,如果不加入用来区分字符的符号,这个编码就无法使用。而在哈夫曼算法中,通过借助哈夫曼树构造编码体系,即使在不使用字符区分符号的情况下,也可以构建能够明确进行区分的编码体系(哈夫曼树下一些编码会向前补0方便区分)。

    哈夫曼算法能够大幅提升压缩比率

    从用哈夫曼算法压缩过的文件中读取数据后,就会以位为单位对该数据进行排查,并与哈夫曼树进行比较看是否到达了目标编码,这就是为什么哈夫曼算法可以对数据进行区分的原因。不管是哪种类型的文件,都得到了很高的压缩比率。

    可逆压缩和非可逆压缩

    图像文件的使用目的通常是把图像数据输出到显示器、打印机等设备上。Windows的标准图像数据形式为BMP,是完全未压缩的。由于显示器及打印机输出的点是可以直接映射的,因此便有了Bitmap这一名称。

    图像文件还可以使用与前面介绍的RLE、哈夫曼算法不同的其他压缩算法。这是因为,多数情况下,并不要求压缩后的图像文件必须还原到与压缩前同等的质量。对于图像文件来说,即使有时无法还原到压缩前那样鲜明的图像状态,但只要肉眼看不出什么区别,有一些模糊也勉强可以接受。而文本文件不能进行非可逆压缩。

    • JPEG:非可逆压缩,因此还原后图像信息有一部分是模糊的
    • TIFF:带有各种标签信息,还可以选择压缩格式,无压缩时比原始的BMP文件还要大
    • GIF:可逆压缩,但因为有色数不能超过256色的限制,还原后颜色信息会有一些缺失

    压缩算法的种类大概有一二十种。之所以会存在如此多的压缩算法,是因为压缩比率、压缩需要的处理时间以及各种文件的需求等是不一样的。

  • 相关阅读:
    Mybatis 内置 Java 类型别名与 typeHandlers
    泛型方法前为什么要加<T>
    jdbcTemplate学习(四)
    jdbcTemplate学习(三)
    jdbcTemplate学习(二)
    jdbcTemplate学习(一)
    博客园markdown toc
    office,ps 等入门教程链接
    mysql 手动加锁测试
    拆机联想ideapad s500
  • 原文地址:https://www.cnblogs.com/fr-ruiyang/p/14570864.html
Copyright © 2011-2022 走看看