Java之哈夫曼壓縮原理案例講解
1. 哈夫曼壓縮原理
- 首先要明確一點,計算機裡面所有的文件都是以二進制的方式存儲的。
- 在計算機的存儲單元中,一個ASCII碼值占一個字節,1個字節等於8位(1Byte = 8bit)
可以參考這個網站:
ASCII碼在線轉換計算器
以”JavaJavaJavaJavaJavaJava”這個字符串為例,它在計算機內部是這樣存儲的(每一個字符的ASCII碼轉換為二進制存儲起來):
public static void main(String[] args) { String beforeStr = "JavaJavaJavaJavaJavaJava"; StringBuilder afterStr = new StringBuilder(""); // 把字符串的每一個字符的ASCII碼轉換為二進制存儲起來 for (int i = 0; i < beforeStr.length(); i++) { afterStr.append(binaryToDecimal((int) beforeStr.charAt(i))); } System.out.println(beforeStr + "\n 在計算內是這樣存儲的: \n" + afterStr); System.out.println("afterStr.length = " + afterStr.length()); } // 十進制轉換位二進制的算法 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(); }
可以發現現在“JavaJavaJavaJavaJavaJava”轉01字符串的長度位192
驗證文件大小:
1.首先,我新建瞭一個文件
2.填充內容
3.查看大小
文件大小為24字節 = 24 * 8 = 192bit
以 “JavaJavaJavaJavaJavaJava” 這個字符串每個字符出現的次數為權值建立最優二叉數
所以“JavaJavaJavaJavaJavaJava”可以表示為:
001011001011001011001011001011001011 è 長度為36
所以壓縮率為:
原來長度是 192,壓縮瞭 (192-36) = 156
壓縮率:156/ 192= 81.25%
到此這篇關於Java之哈夫曼壓縮原理案例講解的文章就介紹到這瞭,更多相關Java之哈夫曼壓縮原理內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- Java基礎入門語法–String類
- Java常用類之字符串相關類使用詳解
- 詳解Java中String類的各種用法
- java——Byte類/包裝類的使用說明
- 詳解Java中String,StringBuffer和StringBuilder的使用