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

    常用鏈接

    留言簿(5)

    隨筆分類(55)

    隨筆檔案(55)

    相冊

    Java

    其他技術

    生活

    最新隨筆

    搜索

    積分與排名

    最新評論

    閱讀排行榜

    評論排行榜

    自強不息


    用心 - 珍惜時間,勇于創造
    主站蜘蛛池模板: 无码精品国产一区二区三区免费| 免费观看无遮挡www的视频| 亚洲不卡中文字幕无码| 欧洲一级毛片免费| 久久精品亚洲日本波多野结衣| 国产亚洲精久久久久久无码AV| 99re6热视频精品免费观看| 亚洲第一综合天堂另类专| 亚洲熟妇丰满多毛XXXX| 免费人成在线视频| 一二三区免费视频| 亚洲一区二区观看播放| 亚洲精品国产美女久久久| 成人毛片免费观看视频大全| 中文字幕一区二区三区免费视频| 亚洲精品电影在线| 亚洲最大av无码网址| 国产日本一线在线观看免费| 一进一出60分钟免费视频| 亚洲狠狠狠一区二区三区| 亚洲男人第一无码aⅴ网站| 成人无码区免费视频观看| 中文字幕久无码免费久久| 亚洲精品中文字幕| 亚洲一区二区电影| 亚洲精品和日本精品| 成人五级毛片免费播放| 无码国产精品一区二区免费式芒果 | 亚洲自偷自偷在线成人网站传媒 | 久久久久亚洲AV无码专区网站| 69堂人成无码免费视频果冻传媒| 黄色网址免费在线观看| 亚洲国产成人手机在线观看| 亚洲欧洲精品国产区| 亚洲国产另类久久久精品小说| 国产美女精品视频免费观看| 99re热免费精品视频观看| 3d动漫精品啪啪一区二区免费| 国产精品成人免费观看| 国产91成人精品亚洲精品| 中文字幕乱码亚洲无线三区|