1. 哈夫曼壓縮原理
- 首先要明確一點,計算機(jī)里面所有的文件都是以二進(jìn)制的方式存儲的。
- 在計算機(jī)的存儲單元中,一個ASCII碼值占一個字節(jié),1個字節(jié)等于8位(1Byte = 8bit)
可以參考這個網(wǎng)站:
ASCII碼在線轉(zhuǎn)換計算器
以"JavaJavaJavaJavaJavaJava"這個字符串為例,它在計算機(jī)內(nèi)部是這樣存儲的(每一個字符的ASCII碼轉(zhuǎn)換為二進(jìn)制存儲起來):
public static void main(String[] args) { String beforeStr = "JavaJavaJavaJavaJavaJava"; StringBuilder afterStr = new StringBuilder(""); // 把字符串的每一個字符的ASCII碼轉(zhuǎn)換為二進(jìn)制存儲起來 for (int i = 0; i < beforeStr.length(); i++) { afterStr.append(binaryToDecimal((int) beforeStr.charAt(i))); } System.out.println(beforeStr + " 在計算內(nèi)是這樣存儲的: " + afterStr); System.out.println("afterStr.length = " + afterStr.length()); } // 十進(jìn)制轉(zhuǎn)換位二進(jìn)制的算法 public static String binaryToDecimal(int n) { StringBuilder str = new StringBuilder(); while (n != 0) { str.insert(0, n % 2); n = n / 2; } // 不滿8位前面補0 while (str.length() < 8) { str.insert(0, "0"); } return str.toString(); }
可以發(fā)現(xiàn)現(xiàn)在“JavaJavaJavaJavaJavaJava”轉(zhuǎn)01字符串的長度位192
驗證文件大?。?/p>
1.首先,我新建了一個文件
2.填充內(nèi)容
3.查看大小
文件大小為24字節(jié) = 24 * 8 = 192bit
以 “JavaJavaJavaJavaJavaJava” 這個字符串每個字符出現(xiàn)的次數(shù)為權(quán)值建立最優(yōu)二叉數(shù)
所以“JavaJavaJavaJavaJavaJava”可以表示為:
001011001011001011001011001011001011 è 長度為36
所以壓縮率為:
原來長度是 192,壓縮了 (192-36) = 156
壓縮率:156/ 192= 81.25%
到此這篇關(guān)于Java之哈夫曼壓縮原理案例講解的文章就介紹到這了,更多相關(guān)Java之哈夫曼壓縮原理內(nèi)容請搜索服務(wù)器之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持服務(wù)器之家!
原文鏈接:https://blog.csdn.net/I_r_o_n_M_a_n/article/details/119257455