> 数据压缩算法,文本压缩算法
几种压缩算法原理介绍- https://blog.csdn.net/clevercode/article/details/46691645
文本压缩算法的对比和选择- https://blog.csdn.net/horkychen/article/details/75174035
数据压缩的历史、原理及常用算法- https://blog.csdn.net/sinat_37138973/article/details/72675574
文本压缩算法的对比和选择- https://blog.csdn.net/HorkyChen/article/details/75174035
Lossy text compression with NLP文本压缩- https://github.com/HorkyChen/LossyTextCompression
  在数据压缩领域里,文本压缩的历史最久,从Morse到Huffman和算术编码(Arithmetic coding),再到基于字典和上下文的压缩算法。各种算法不断改进,从通用算法,到现在更具针对性的算法,结合应用场景的垂直化的趋势越来越明显。所以在选择或者评价压缩算法,一定要结合实际应用场景加以考虑,包括字符集、内容的大小、压缩及解压的性能、以及各端支持情况。
  最典型的建模方法是基于字符的概率统计,而基于上下文的建模方法(Context Modeling)则是从文本内容出发,它们追求的目标都是让字符的出现概率越不平均越好。转换方法是最具代表性的是基于词典的转换,比如庞大的LZ族系。Huffman和算术编码则是常见的编码方法。

-- 常用的数据压缩算法有:游程编码;lz77;lz78;lzma;哈夫曼编码;ppm;算术编码;bwt变换
1.有损压缩:JPEG联合图像专家组;MPEG视频专家组;MP3第三代音频协议(图像,视频,音频);
2.无损压缩:游程长度编码;哈夫曼编码;lempel ziv编码;

-- 基本的分为两大类:有损和无损:
 1.有损压缩:主要是一些量化算法,比如a率,u率,lloyds最优量化。有损压缩方案在图像,音频,视频,或者其他为了提高压缩效率而可以接受某些程度信息丢失的场合很有用处。
 2.无损压缩:主要是一些编码算法,比如子带编码,差分编码,哈夫曼编码等。无损压缩方案通常被用来压缩文本,可执行程序,或者其他任何需要完全重建数据的地方。

-- 数据压缩分为有损压缩和无损压缩,其中有损压缩方法有两种:          
  1.一种是行程编码,即将原数据中连续出现的信源符号(行程)用一个计数值(行程长度)和该信源符号来代替。举个例子,数据段aaaaabbbbbccccdddd,经行程编码压缩后的结果为5a5b4c4d,压缩比约为2:1。        
  2.另一种是哈夫曼编码,根据信源符号出现的比率的分布特征而进行压缩编码,在信源符号和编码之间建立明确的一一对应的关系。哈夫曼编码采用变长二进制编码,将出现比率高的信源符号用较短的编码,而出现比率低的用较长编码,从而实现数据压缩。

-- 当前比较流行的压缩算法中其突破的核心只有两个: 
* ANS (FSE是它的一个实现): Facebook zStd, Apple的lzfse等 
* Context Modeling + LZ77 (编码是Huffman): Brotli

ANS是前两类编码算法战争的终结者。它在2014年被提出来,随后很快就得到了大量应用。本质上属于算术编码,但它成功地找到了一个用近似概率表示的表格,将原来的概率计算转换为查表。所以它是一个达到Huffman编码效率的算术编码方法。FSE(Finite State Entropy)是ANS最为著名的实现。
  可行的算法只需要基于一部分内容的上下文进行预测,这就是PPM(部分匹配预测,prediction by partial match)以及各种演进版本。

> 数据压缩及解压缩
-- LZ77压缩和解压,无损压缩算法
lz77压缩算法与哈夫曼压缩算法,LZ77算法如何做压缩及解压缩。
LZ77压缩和解压算法(C版)- https://blog.csdn.net/qq_23084801/article/details/77496955
A Python LZ77-Compressor- https://github.com/manassra/LZ77-Compressor/

1、LZ77是基于字典的算法,和霍夫曼编码不同,其处理的符号不一定是文本字符,可以是任何大小的符号。 
2、LZ77使用前向缓冲区(待编码区的小段)和一个滑动窗口(搜索区)实现。滑动窗口是个历史缓冲器,它被用来存放输入流的前n个字节的有关信息。前向缓冲区是与动态窗口相对应的,它被用来存放输入流的前n个字节。常用滑动窗口4KB,前向缓冲区32B 
   LZ77算法主要思想就是在前向缓冲区中不断寻找能够与字典中短语匹配的最长短语。如果匹 配的数据长度大于最小匹配长度,那么就输出一对〈长度,距离滑动窗中对应的位置〉数组。长度(length)是匹配的数据长度,而距离(distance)说明了在输入流中向后多少字节这个匹配数据可以被找到。 
 LZ77算法中代价最高的是滑动窗口中扫描匹配短语。一个更高效的方法是用某种高效搜索性能的数据结构代替滑动窗口。 
 LZ77比霍夫曼编码有更好的压缩比,但是压缩过程中LZ77要消耗相当长的时间。

LZ77算法原理及实现- http://www.cnblogs.com/en-heng/p/4992916.html
LZ78算法原理及实现- http://www.cnblogs.com/en-heng/p/6283282.html

-- LZ77,LZSS
 LZ77算法是采用字典做数据压缩的算法,由以色列的两位大神Jacob Ziv与Abraham Lempel在1977年发表的论文《A Universal Algorithm for Sequential Data Compression》中提出。此算法的一个改进算法是由Storer和Szymanski在1982年开发的,称为LZSS算法。LZ77是典型的基于字典的压缩算法,现在很多压缩技术都是基于LZ77。鉴于其在数据压缩领域的地位。LZ77算法是无损压缩算法。

-- LZ78,LZW
  A.Lempel和J.Ziv在1978年首次发表了介绍这种编码方法的文章,称为LZ78。在他们的研究基础上,Terry A.Welch在1984年发表对这种编码算法进行了改进的文章,并首先在高速硬盘控制器上应用了这种算法。因此后来把这种编码方法称为LZW(Lempel-Ziv Walch)压缩编码。LZSS同样可以和熵编码联合使用,例如ARJ就与霍夫曼编码联用,而PKZip则与Shannon-Fano联用,它的后续版本也采用霍夫曼编码。

-- Huffman与LZ77
  Huffman:基于统计的数据压缩编码,比如Huffman编码,需要得到先验知识——信源的字符频率,然后进行压缩。但是在大多数情况下,这种先验知识是很难预先获得。因此,设计一种更为通用的数据压缩编码显得尤为重要。
  LZ77数据压缩算法应运而生,其核心思想:利用数据的重复结构信息来进行数据压缩

-- gzip和zlib
zlib识别算法把字节码[0...255]分成三大类:
 (1)白名单:文本型字节码,包括9(TAB), 10(LF), 13(CR), 32(SPACE)到255。
 (2)灰名单:可容忍的字节码,包括7(BEL), 8(BS), 11(VT), 12(FF), 26(SUB), 27(ESC)。
 (3)黑名单:不能容忍的、非文本型字节码,包括0(NUL)到6, 14到31。
通用编码技术。词典编码(Dictionary Encoding)技术就是属于这一类,这种技术属于无损压缩技术。

deflate(RFC1951):一种压缩算法,使用LZ77和哈弗曼进行编码;
zlib(RFC1950):一种格式,是对deflate进行了简单的封装,他也是一个实现库(delphi中有zlib,zlibex)
gzip(RFC1952):一种格式,也是对deflate进行的封装。

gzip = gzip头 + deflate编码的实际内容 + gzip尾
zlib = zlib头 + deflate编码的实际内容 + zlib尾

zlib,gzip,zip,7z压缩的区别- https://blog.csdn.net/lanmenghcc/article/details/40071923
  zlib是一种数据压缩程序库,它的设计目标是处理单纯的数据(而不管数据的来源是什么)。zip是适用于压缩多个文件的格式(相应的工具有PkZip和WinZip等),因此,zip文件还要进一步包含文件目录结构的信息,比gzip的头信息更多。但需要注意,zip格式可采用多种压缩算法,我们常见的zip文件大多不是用zlib的算法压缩的,其压缩数据的格式与gzip大不一样。
  gzip是一种文件压缩工具(或该压缩工具产生的压缩文件格式),它的设计目标是处理单个的文件。gzip在压缩文件中的数据时使用的就是zlib。为了保存与文件属性有关的信息,gzip需要在压缩文件(*.gz)中保存更多的头信息内容,而zlib不用考虑这一点。但gzip只适用于单个文件,所以我们在UNIX/Linux上经常看到的压缩包后缀都是*.tar.gz或*.tgz,也就是先用tar把多个文件打包成单个文件,再用gzip压缩的结果。

Java SDK提供了对上述三种压缩技术的支持:Inflater类和Deflater类直接用zlib库对数据压缩/解压缩,GZIPInputStream类和GZIPOutputStream类提供了对gzip格式的支持,ZipFile、ZipInputStream、ZipOutputStream则用于处理zip格式的文件。

> 多种文件的压缩与解压缩
Android多种格式的异步解压/压缩解决方案- http://www.jianshu.com/p/339ab9048f91#
zip4j是一个在java上比较好用的zip文件压缩解压库 http://www.softpedia.com/get/Programming/Components-Libraries/Zip4j.shtml
rar格式- http://www.java2s.com/Code/Jar/j/Downloadjavaunrar05jar.htm
7z格式- http://sevenzipjbind.sourceforge.net/
J7zip on Android- http://stackoverflow.com/questions/14024874/j7zip-on-android-extracting-from-an-archive-and-listing-contents/14676769#14676769
A simple android ndk library used to simply extract lzma 7z files- https://github.com/hzy3774/AndroidUn7zip
  还有一种7z的解压方法,就是利用compressor开源库解压,也可以在Android上运行,但是实际使用过程中还是有点问题的 https://github.com/nickming/ArchiverDemo
  Android Gzip压缩和解压缩文件- http://blog.csdn.net/mobei1983/article/details/51505581

数据压缩及解压缩算法,多种文件的压缩与解压缩-java android相关推荐

  1. huffman算法实现文件的压缩与解压

            本文采用哈夫曼编码的方式进行文件的压缩和解压缩,主要原理是通过huffman编码来表示字符,出现次数多的编码短,出现次数少的编码长,这样整体而言,所需的总的bit位是减少的.但是当大部 ...

  2. Linux命令(9)—— 文件的压缩与解压缩

    .gz..bz2..zip文件均可以在linux操作系统下进行解压缩和压缩 tar命令 适用于 .gz..bz2类型文件 tar命令有很多选项 选项 作用 -c 创建出你要打包的文件 -j 压缩或解压 ...

  3. Linux下文件的压缩、解压缩、打包以及提取

    文章目录 Linux下文件的压缩.解压缩.打包以及提取 一.单个文件的解压缩 1.压缩文件: 2.文件的压缩 3.压缩文件的查看: 4.文件的解压:gunzip [选项] 文件名 二.多个文件的打包和 ...

  4. 哈夫曼树实现文件的压缩与解压缩

    利用哈夫曼树实现文件的压缩与解压缩 压缩: 1.统计出文件中相同字符出现的次数 2.获取哈夫曼编码 次数作为权值构建哈夫曼树 3.重新编码,写回压缩文件 保存头文件: 源文件后缀 编码信息的行数 每个 ...

  5. 对rar文件的解压缩,对zip文件的压缩与解压缩

    一.对rar文件的解压缩 1.maven <dependency><groupId>com.github.junrar</groupId><artifactI ...

  6. Linux下文件的压缩与解压缩

    Linux下文件的压缩与解压缩与Windows环境下有较大的区别,在Windows下只需要安装类似Winrar工具就能解压缩大部分文件,而在Linux命令行下每一种文件都有不同的压缩和解压缩方法. 使 ...

  7. ADPCM WAVE文件的压缩与解压缩

    一.WAVE文件   WAVE文件是计算机领域最常用的数字化声音文件格式之一,它是微软专门为Windows系统定义的波形文件格式(Waveform Audio),由于其扩展名为"*.wav& ...

  8. 如何使用Python对文件进行压缩与解压缩

    前言 我们在日常工作中,除了会涉及到使用Python处理文本文件,有时候还会涉及对压缩文件的处理. 通常会涉及到的压缩文件格式有: •rar:Windows 环境下用的比较多的压缩,比较著名的GUI工 ...

  9. sudo mysql压缩备份解压操作_高效管理文件之压缩及解压缩 .bz2 文件

    对文件进行压缩,可以通过使用较少的字节对文件中的数据进行编码来显著地减小文件的大小,并且在跨网络的文件的备份和传送时很有用. 另一方面,解压文件意味着将文件中的数据恢复到初始状态.Linux 中有几个 ...

最新文章

  1. mysql insert replace_mysql 操作总结 INSERT和REPLACE
  2. linux文件目录的管理,Linux文件目录管理
  3. python-字典数据类型-0222
  4. dragon编译linux,在Linux系统中安装Alibaba Dragonwell8的方法
  5. js迭代器实现斐波那契数列
  6. JavaScript浏览器编程之——使用Cookie传递参数
  7. 关于如何在Listener中注入service和ServletContextListener源码分析
  8. 要想成功必须具备的九种手段
  9. python画鱼骨图_这样做数据可视化驾驶舱,高端大气,一目了然,领导不点赞都难...
  10. 江苏2021高考成绩查询全省排名,江苏省高考排名对应大学-江苏考生位次查询(2021年参考)...
  11. Openwrt 18.06 iPhone XR usb tethering导致内核崩溃问题解决方案
  12. jQuery实现购物车功能(小计、总计)
  13. IDEA与GitHub的仓库相关联,幼儿园教学(狗头保命)
  14. PAT A1129 重载小于号快速解答
  15. (二)航空发动机强度与振动复习纲要
  16. 感悟:君子不立于危墙之下
  17. 毕业设计--2020.02.18 奇耘4.2寸墨水屏的程序设计思路分享
  18. 程序员幽默:让你笑到肚子痛的搞笑动图
  19. 游戏策划笔记:角色动作分析
  20. 【ElementUI】el-table 设置 max-height 后,当表格数据未超过高度时,表格右侧会出现空白列的解决方案

热门文章

  1. 爬取百度词语的相关内容
  2. 弯道超车!阿里P5~P8学习路线终发布,程序员进阶的关键所在
  3. SQL行转列方式优化查询性能实践
  4. 交叉验证的几个方法的解释(简单交叉验证、k折交叉验证、留一法)
  5. HK32F030MF4P6 TM1650驱动
  6. 生产管理软件之看板的种类
  7. 干票大的,230万篇文章随你下载!
  8. webmagic爬取网页
  9. 安卓系统USB产品芯片使用推荐
  10. 如何添加PDF书签?学会这三种方法