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!

推薦閱讀: