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

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

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

    狂奔 lion

    自強不息

    關于文本協議中二進制到文本的轉碼

    偶然間注意到一個困擾了我很久的問題,那就是如果我不通過Socket而通過應用層的某種基于文本的協議,比如SOAP進行通信的話,
    如何傳遞二進制的數據呢?現在SOA,Web Service等很火,應該會遇到這種問題吧?

    現在已知的方法可以通過Base64進行編碼,其原理和方法見:
    http://baike.baidu.com/view/469071.htm

    這種方法采用了字節中的6位進行文本轉換,并且在其他論壇上也看到了帖子說淘寶的搜索也采用了這種編碼方式進行處理。
    但是采用了5位進行轉換。并且大膽地給出了5位轉碼的算法,見:
    http://www.javaeye.com/topic/286240

    不過這種5位的轉換會產生更多多余的字節,6位的轉碼充分利用了現今的可讀文本,可是5位卻沒有,因為5和8的最小公倍數是40,
    所以當每轉換40位即5個字節的二進制數據需要8個字節來表示,這樣就多產生3個字節,浪費的效率是3/5, 而6位轉碼浪費的效率是
    1/3。而且隨著字節增多,轉化效率也在下降。可見采用5位轉碼是一種既浪費空間,又浪費效率的解決方案。在不增加url長度的情況下充分提高效率,6位編碼是最佳的。如果可以任意的餓犧牲url長度,
    可以把0-9全部拿出來當做標記位,0-9不會單獨出現,這樣一共有10*26 + 26 = 286 種可能還不包括小寫字母,
    此外還有=,+,-什么的至少256可以編碼8位的字節了,這樣處理效率就提高了。

    現在把問題優化一下,人類可讀無歧義的文本碼有0-9,A-Z,a-z共62個
    設取出x個作為標志位則(62-x) * x + (62 - x) >= 256
    解這個二元一次方程得到:
    3.366<=X<=57.634
    考慮到編碼的文本長度,取x的最小值,即 4
    最優解:
    用0, 1, 2, 3做為標志位
    4-9,A-Z, a-z參與編碼并與標志位配合實現8位字節的文本化
    可以看到這種方法的轉碼效率會比較高,但是空間冗余大。

    此外其實可用的文本不知62個,包括感嘆號等用上后補足64 = 2^6
    它的高位是 00
    那么只要再找到三個文本符保存其他三個高位01 10 11就可以了
    這樣的轉碼空間可以更小一些。


    想法還很不成熟,歡迎大家批評

     @2008 楊一. 版權所有. 保留所有權利

    posted on 2008-12-04 15:56 楊一 閱讀(1661) 評論(2)  編輯  收藏 所屬分類: Other Tech

    評論

    # re: 關于文本協議中二進制到文本的轉碼 2008-12-04 17:05 徐堯

    我上午看那個帖子了,這么敲也看到您的  回復  更多評論   

    # re: 關于文本協議中二進制到文本的轉碼 2008-12-04 19:11 magicgod

    base64 + 壓縮流 就行了,也不會浪費,就是多一點cpu就可以了。  回復  更多評論   

    <2008年12月>
    30123456
    78910111213
    14151617181920
    21222324252627
    28293031123
    45678910

    導航

    公告

    本人在blogjava上發表的文章及隨筆除特別聲明外均為原創或翻譯,作品受知識產權法保護并被授權遵從 知識分享協議:署名-非商業性使用-相同方式共享 歡迎轉載,請在轉載時注明作者姓名(楊一)及出處(www.tkk7.com/yangyi)
    /////////////////////////////////////////
    我的訪問者

    常用鏈接

    留言簿(5)

    隨筆分類(55)

    隨筆檔案(55)

    相冊

    Java

    其他技術

    生活

    最新隨筆

    搜索

    積分與排名

    最新評論

    閱讀排行榜

    評論排行榜

    自強不息


    用心 - 珍惜時間,勇于創造
    主站蜘蛛池模板: 亚洲VA综合VA国产产VA中| 四虎永久免费影院| 久久精品国产亚洲AV网站| 在线免费观看h片| 国产精一品亚洲二区在线播放| 最新亚洲成av人免费看| 亚洲精品无码高潮喷水在线| 你好老叔电影观看免费| 国产成人精品日本亚洲| 亚洲一区二区在线免费观看| 久久精品国产亚洲AV无码麻豆 | 亚洲人xxx日本人18| 日韩不卡免费视频| 亚洲成a∨人片在无码2023| 日韩亚洲精品福利| 中文永久免费观看网站| 91久久亚洲国产成人精品性色| 最近免费中文在线视频| 亚洲人成电影院在线观看| 免费爱爱的视频太爽了| 香蕉国产在线观看免费| 久久久久亚洲精品成人网小说| 日韩在线播放全免费| 在线亚洲精品视频| 无码欧精品亚洲日韩一区| 在线观看免费人成视频| 免费一级做a爰片久久毛片潮| 亚洲日韩激情无码一区| 100000免费啪啪18免进| 免费无码午夜福利片69| 亚洲国产精品热久久| 97无码免费人妻超级碰碰夜夜| 全黄A免费一级毛片| 亚洲高清无在码在线电影不卡| 日韩电影免费在线| 在线免费观看h片| 亚洲成aⅴ人片久青草影院按摩| 日韩一卡2卡3卡4卡新区亚洲| 免费A级毛片无码无遮挡内射| 免费高清A级毛片在线播放| 亚洲一区影音先锋色资源|