卖逼视频免费看片|狼人就干网中文字慕|成人av影院导航|人妻少妇精品无码专区二区妖婧|亚洲丝袜视频玖玖|一区二区免费中文|日本高清无码一区|国产91无码小说|国产黄片子视频91sese日韩|免费高清无码成人网站入口

java怎樣壓縮包的大小 java壓縮和解壓rar格式,不要zip格式的?

java壓縮和解壓rar格式,不要zip格式的?Rar和zip的算法不同。Rar是付費(fèi)產(chǎn)品,算法不公開(kāi)。如果要壓縮和解壓縮rar格式,1。研究一下。Winrar命令2。用java(()調(diào)用命令行。ex

java壓縮和解壓rar格式,不要zip格式的?

Rar和zip的算法不同。Rar是付費(fèi)產(chǎn)品,算法不公開(kāi)。如果要壓縮和解壓縮rar格式,1。研究一下。Winrar命令2。用java(()調(diào)用命令行。exec(cmd))執(zhí)行。這可以 不能在沒(méi)有安裝winrar的機(jī)器上運(yùn)行。

壓縮格式轉(zhuǎn)換大小有哪些?

1. amp的文件名罐子 "是 "Java存檔文件 "。從全稱可以看出它和Java有關(guān),是一種文件格式,和Zip文件格式很像。不同之處在于,當(dāng)JAR格式被壓縮時(shí),a "元INF… "將生成文件。

2. "Zip "應(yīng)該每個(gè)接觸壓縮文件的人都知道,也是最常見(jiàn)的。zip的文件壓縮后,解壓時(shí)一般不需要下載單獨(dú)的解壓軟件,因?yàn)槲覀兊碾娔X系統(tǒng)對(duì)Zip格式支持很大。

3.rar ",雖然Zip在格式中占據(jù)了很高的位置,但是現(xiàn)在很多壓縮文件格式很大一部分都是rar格式,因?yàn)镽AR比Zip的壓縮成功率更高。

4. "出租車及相關(guān)服務(wù)是Microsoft安裝軟件時(shí)使用的一種文件格式。因?yàn)樯婕暗桨惭b軟件,CAB中的文件格式不再是直接的文件壓縮,文件名可以更改。雖然可以直接壓縮,但是強(qiáng)壓縮后的文件通常打不開(kāi)。

Java中,哪種壓縮算法可以對(duì)30M左右的文件做到較大的壓縮率,解壓后文件MD5值要保持不變?

分析主體的需求如下:

1.高壓縮比

保持不變

對(duì)應(yīng)于技術(shù)語(yǔ)言,目標(biāo)壓縮算法必須滿足兩個(gè)條件:

1.高壓縮效率

2.無(wú)損壓縮

1.什么是無(wú)損壓縮?無(wú)損壓縮是指數(shù)據(jù)壓縮后,信息不丟失,可以完全恢復(fù)到壓縮前的原始狀態(tài)。

無(wú)損壓縮技術(shù)主要包括兩個(gè)步驟:

(1)建模

(2)根據(jù)模型,高頻部分用短碼表示,低頻部分用長(zhǎng)碼表示。

步驟(2)中使用的常見(jiàn)編碼技術(shù)是霍夫曼編碼(也用于DEFLATE)和算術(shù)編碼。其中算術(shù)編碼可以達(dá)到高級(jí)理論的最大壓縮率上限。其壓縮比高于霍夫曼編碼是因?yàn)?霍夫曼編碼首先對(duì)輸入數(shù)據(jù)進(jìn)行劃分分組,每組數(shù)據(jù)單獨(dú)編碼;算術(shù)編碼是將多組數(shù)據(jù)編碼在一起。

使用算術(shù)編碼的壓縮算法通常在編碼之前估計(jì)輸入符號(hào)的概率。這種估計(jì)越精確,編碼結(jié)果就越接近最佳結(jié)果。

2.算術(shù)編碼的算法描述(1)假設(shè)有一段數(shù)據(jù)需要編碼,統(tǒng)計(jì)其中的所有字符以及出現(xiàn)的次數(shù)。

(2)將區(qū)間[0,1]分成若干子區(qū)間,每個(gè)子區(qū)間代表上述字符中的一個(gè),區(qū)間的大小與該字符出現(xiàn)在文本中的概率p成正比。那么可能性就越大間隔越大。所有子間隔相加正好為[0,1]。

(3)編碼從一個(gè)初始區(qū)間[0,1]開(kāi)始,設(shè)置:low0,high 1。

(4)不斷讀取原始數(shù)據(jù)的字符,找到這個(gè)字符所在的區(qū)間,比如[L,H],更新:。

低低(高-低)* L

高-低(高-低)* H

(5)最后,將得到的區(qū)間[低,高]中的任意小數(shù)以二進(jìn)制形式輸出,得到編碼數(shù)據(jù)。

具體例子如下:

阿爾伯

統(tǒng)計(jì)它們出現(xiàn)的頻率和概率:

將這些字符的區(qū)間按照概率逐一排列,我們得到一個(gè)[0,1]的劃分區(qū)間:開(kāi)始編碼,初始區(qū)間為[0,1]。注意這里又用到了區(qū)間這個(gè)詞,但是這個(gè)區(qū)間和上面代表每個(gè)字符的概率區(qū)間不一樣。這里我們可以稱之為編碼區(qū)間,它會(huì)發(fā)生變化,確切的說(shuō)是越來(lái)越小。循序漸進(jìn):

(1)初始編碼間隔為[0,1],即

低0

高1

(2)第一個(gè)字符A的概率區(qū)間是[0,0.2],那么L 0,H 0.2,更新:

低低(高-低)* L0

高-低(高-低)* H0.2

(3)如果第二個(gè)字符r的概率區(qū)間是[0.6,1],那么L 0.6,H 1,更新:

低低(高-低)* L0.12

高-低(高-低)* H0.2

(3)第三個(gè)字符B的概率區(qū)間是[0.2,0.4],那么L 0.2,H 0.4,更新:

低低(高-低)* L0.136

高-低(高-低)* H0.152

(4) ......

根據(jù)以上描述,不難看出這種算法的特點(diǎn):

每次編碼時(shí),在現(xiàn)有區(qū)間上找到子區(qū)間,形成 "區(qū)間集 ":比如一開(kāi)始A落在0到0.2上,那么編碼區(qū)間就縮小到[0,0.2],第二個(gè)字符是R,那么R對(duì)應(yīng)的子區(qū)間[0.12,0.2]就在[0,0.2]上按比例取出,以此類推。最后,我們得到一個(gè)長(zhǎng)十進(jìn)制數(shù),它神奇地包含了所有的原始數(shù)據(jù)。

3.算術(shù)編碼的解碼過(guò)程是編碼過(guò)程的逆過(guò)程。從編碼的小數(shù)開(kāi)始,通過(guò)不斷尋找小數(shù)落在哪個(gè)概率區(qū)間,就可以一個(gè)一個(gè)地找出原來(lái)的字符。例如,如果十進(jìn)制數(shù)是0.14432,那么第一個(gè)字符顯然是a,因?yàn)樗湓赱0,0.2。),然后看[0,0.2]區(qū)間0.14432落在哪個(gè)相對(duì)子區(qū)間,發(fā)現(xiàn)是[0.6,1],可以發(fā)現(xiàn)第二個(gè)字符是r,以此類推。

是如何實(shí)現(xiàn)算術(shù)編碼的?/** *算術(shù)編碼* */公共類算術(shù){ // Charact:{ A,B,C,D,E,F(xiàn),$ } } private char[] symbolchars//P:{ 0.2,0.1,0.2,0.05,0.3,0.05,0.1 } private double[]概率公共算術(shù)(char[]symbol chars, double[]probability){ symbol chars probability }/* * * * @ param symbols */public double coding(字符串符號(hào)){ char[]cs()double symbolRangeLow[]new double[probability . length]for(int I 0 I lt symbolRangeLow . length I){ symbolRangeLow[I]0 for(int j 0j lt I j){ symbolRangeLow[I]probability[j]} } int current symbol double low 0.0 double high 1.0 double range 1.0 for(int I 0 I lt cs . length I){ currents cs[i])低低范圍* symbolRangeLow[currentSymbol]高低范圍*概率[currentSymbol]范圍高-低}返回低(高-低)/ 2 } /** * * @param codeNumber */公共字符串解碼(double codeNumber) {字符串符號(hào)s double symbolRangeLow[]new double[probability . length]for(int I 0 I lt symbolRangeLow . length I){ symbolRangeLow[I]probability[j]} } double subSymbolRangeLow[]new double[symbolRangeLow . length]double subSymbolRangeLow[]new double[probability . length]double subRangeLow 0 double subRange 0 for(int I 0 I lt symbol chars . length I){ subsymbolrangellow[I]symbol

sub range sub symbolrangelow[I]sub range sub symbolrange[I]current symbol I } } double sub symbolprobsum sub range for(int I 0 I lt symbol chars . length I){

subSymbolRange[I]subRange * probability[I]subSymbolRangeLow[I]subSymbolProbSum subSymbolProbSum subSymbolRange[I]} symbol chars[current symbol]} while(symbol chars[current symbol]!$)return symbols } public int getIndex(char[]cs,char C){ for(int I 0 I lt cs . length I){ if(cs[I]C){ return-1 }//Test public static void main(String args[]){ char[]symbolchars { A,B,C,D,E,F(xiàn),$ } double[] probability { 0.2,0.1,0.2,0.05,0.3,0.05,0.1 }算術(shù)算術(shù)新算術(shù)(symbol chars,probability