<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    風行天下

    JAVA太極
    posts - 4, comments - 10, trackbacks - 0, articles - 55
      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

    Jakarta Commons Codec

    Posted on 2005-04-04 11:21 風太少 閱讀(449) 評論(0)  編輯  收藏
    SECTION 01 Codec 總覽

    Java JDK有一個 java.security 的 package, 提供了 MessageDigest 的編碼方式, Digest Algorithms 包括了 MD2, MD5, SHA-1, SHA-256, SHA-384, 及 SHA-512 等等. 但是我們常會需要用到其它的編碼演算, 此時的解決方法, 可以先來看看 commons codec 是否已經(jīng)加入標準, 不然就去一些學術(shù)單位尋找, 真的沒有, 就只好自己寫了.

    目前 commons codec 已經(jīng)有提供 base64, hex, 及 metaphone, soundex 等編碼. 下載位置為 codec 1.1


    SECTION 02 Base64 編解碼

    base64 編解碼技術(shù)廣泛地利用在 Internet 之上, 主要就是將 bytecode 轉(zhuǎn)換成 ascii 碼, 最常常使用的則是屬于電子郵件附件的傳輸. 你可以查看你的郵件原碼, 如果有 Content-Transfer-Encoding: base64 , 就代表這封信有采用 base64 來編碼, 另外則是 QP ( quoted-printable ) 編碼方式, 基本上大多數(shù)的讀信軟件都有支持.
    
    package com.softleader.sample.codec;
    
    import org.apache.commons.codec.binary.Base64;
    import org.apache.commons.codec.*;
    
    public class Base64Test {
    
        public static void main(String args[]) {
            Base64 base64 = new Base64();
            String str = "中文";
            byte[] enbytes = null;
            String encodeStr = null;
            byte[] debytes = null;
            String decodeStr = null;
            try {
                enbytes = base64.encode(str.getBytes());
                encodeStr = new String(enbytes);
                debytes = base64.decode(enbytes);
                decodeStr = new String(debytes);
            } catch (EncoderException ex) {
                System.out.println("編碼錯誤");
            } catch (DecoderException ex) {
                System.out.println("解碼錯誤");
            }
            System.out.println("編碼前:"+str);
            System.out.println("編碼后:"+encodeStr);
            System.out.println("解碼后:"+decodeStr);
        }
    }
    
    cmd>java com.softleader.sample.codec.Base64Test
    執(zhí)行結(jié)果
    編碼前:中文
    編碼后:pKSk5Q==
    解碼后:中文



    SECTION 03 Hex 編解碼

    通常我們會對于 URL Form GET 時候進行 16 進位編碼, 將 byte[] 轉(zhuǎn)成 char[],
    
    package com.softleader.sample.codec;
    
    import org.apache.commons.codec.binary.Hex;
    import org.apache.commons.codec.*;
    
    public class HexTest {
    
        public static void main(String args[]) {
            Hex hex = new Hex();
            String str = "中文";
            char[] enbytes = null;
            String encodeStr = null;
            byte[] debytes = null;
            String decodeStr = null;
            try {
                enbytes = hex.encodeHex(str.getBytes());
                encodeStr = new String(enbytes);
                debytes = hex.decodeHex(enbytes);
                decodeStr = new String(debytes);
            } catch (Exception ex) {
                ;
            }
            System.out.println("編碼前:"+str);
            System.out.println("編碼后:"+encodeStr);
            System.out.println("解碼后:"+decodeStr);
        }
    }
    
    cmd>java com.softleader.sample.codec.HexTest
    執(zhí)行結(jié)果
    編碼前:中文
    編碼后:a4a4a4e5
    解碼后:中文



    SECTION 04 Metaphone 及 Soundex 編碼

    Metaphone 建立出相同的key給發(fā)音相似的單字, 比 Soundex 還要準確, 但是 Metaphone 沒有固定長度, Soundex 則是固定第一個英文字加上3個數(shù)字. 這通常是用在類似音比對, 也可以用在 MP3 的軟件開發(fā).
    
    package com.softleader.sample.codec;
    
    import org.apache.commons.codec.language.*;
    import org.apache.commons.codec.*;
    
    public class LanguageTest {
    
        public static void main(String args[]) {
            Metaphone metaphone = new Metaphone();
            RefinedSoundex refinedSoundex = new RefinedSoundex();
            Soundex soundex = new Soundex();
    
            for (int i=0; i<2; i++ ) {
                String str=(i==0)?"resume":"resin";
    
                String mString = null;
                String rString = null;
                String sString = null;
    
                try {
                    mString = metaphone.encode(str);
                    rString = refinedSoundex.encode(str);
                    sString = soundex.encode(str);
    
                } catch (Exception ex) {
                    ;
                }
                System.out.println("Original:"+str);
                System.out.println("Metaphone:"+mString);
                System.out.println("RefinedSoundex:"+rString);
                System.out.println("Soundex:"+sString +"\n");
    
            }
        }
    }
    
    
    cmd>java com.softleader.sample.codec.LanguageTest
    執(zhí)行結(jié)果
    Original:resume
    Metaphone:RSM
    RefinedSoundex:R903080
    Soundex:R250


    Original:resin
    Metaphone:RSN
    RefinedSoundex:R90308
    Soundex:R250


    可以看到 Soundex 靈敏度較低

    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導航:
     
    主站蜘蛛池模板: 在线观看免费视频网站色| 久久香蕉国产线看观看亚洲片| 三级片免费观看久久| 国产精品亚洲成在人线| 18禁成年无码免费网站无遮挡| 人人爽人人爽人人片av免费| 在线观看亚洲一区二区| 中文字幕看片在线a免费| 亚洲无砖砖区免费| 国产又粗又猛又爽又黄的免费视频 | 特级毛片aaaa级毛片免费| 猫咪社区免费资源在线观看 | 亚洲欧美第一成人网站7777 | 免费看美女让人桶尿口| 青青青国产手机频在线免费观看 | 成人免费无码大片a毛片软件| gogo免费在线观看| 中文字幕在线亚洲精品| 在线观看视频免费完整版| 中文字幕在线视频免费观看| 亚洲日韩AV一区二区三区中文 | 中国性猛交xxxxx免费看| 国产成人精品日本亚洲专区6| 亚洲欧洲日产国码av系列天堂| 99re6在线精品免费观看| 亚洲一区二区三区高清在线观看 | 四虎精品亚洲一区二区三区| 又粗又长又爽又长黄免费视频| 亚洲最大中文字幕| 国产成人精品日本亚洲| 免费h成人黄漫画嘿咻破解版| 麻豆视频免费观看| 精品在线免费观看| 一区二区三区在线免费观看视频| 在线观看亚洲AV每日更新无码| 久久亚洲AV成人无码国产| 亚洲成AⅤ人影院在线观看| 四虎影院免费视频| 精品久久久久成人码免费动漫| 99久久99久久精品免费观看| 999zyz**站免费毛片|