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

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

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

    狂奔 lion

    自強(qiáng)不息

    關(guān)于文本協(xié)議中二進(jìn)制到文本的轉(zhuǎn)碼

    偶然間注意到一個(gè)困擾了我很久的問(wèn)題,那就是如果我不通過(guò)Socket而通過(guò)應(yīng)用層的某種基于文本的協(xié)議,比如SOAP進(jìn)行通信的話(huà),
    如何傳遞二進(jìn)制的數(shù)據(jù)呢?現(xiàn)在SOA,Web Service等很火,應(yīng)該會(huì)遇到這種問(wèn)題吧?

    現(xiàn)在已知的方法可以通過(guò)Base64進(jìn)行編碼,其原理和方法見(jiàn):
    http://baike.baidu.com/view/469071.htm

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

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

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

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


    想法還很不成熟,歡迎大家批評(píng)

     @2008 楊一. 版權(quán)所有. 保留所有權(quán)利

    posted on 2008-12-04 15:56 楊一 閱讀(1663) 評(píng)論(2)  編輯  收藏 所屬分類(lèi): Other Tech

    評(píng)論

    # re: 關(guān)于文本協(xié)議中二進(jìn)制到文本的轉(zhuǎn)碼 2008-12-04 17:05 徐堯

    我上午看那個(gè)帖子了,這么敲也看到您的  回復(fù)  更多評(píng)論   

    # re: 關(guān)于文本協(xié)議中二進(jìn)制到文本的轉(zhuǎn)碼 2008-12-04 19:11 magicgod

    base64 + 壓縮流 就行了,也不會(huì)浪費(fèi),就是多一點(diǎn)cpu就可以了。  回復(fù)  更多評(píng)論   

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

    導(dǎo)航

    公告

    本人在blogjava上發(fā)表的文章及隨筆除特別聲明外均為原創(chuàng)或翻譯,作品受知識(shí)產(chǎn)權(quán)法保護(hù)并被授權(quán)遵從 知識(shí)分享協(xié)議:署名-非商業(yè)性使用-相同方式共享 歡迎轉(zhuǎn)載,請(qǐng)?jiān)谵D(zhuǎn)載時(shí)注明作者姓名(楊一)及出處(m.tkk7.com/yangyi)
    /////////////////////////////////////////
    我的訪(fǎng)問(wèn)者

    常用鏈接

    留言簿(5)

    隨筆分類(lèi)(55)

    隨筆檔案(55)

    相冊(cè)

    Java

    其他技術(shù)

    生活

    最新隨筆

    搜索

    積分與排名

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    自強(qiáng)不息


    用心 - 珍惜時(shí)間,勇于創(chuàng)造
    主站蜘蛛池模板: 18观看免费永久视频| 亚洲中文字幕日产乱码高清app| 好看的亚洲黄色经典| 国产成人精品免费视频大全| 亚洲Aⅴ无码一区二区二三区软件| 亚洲最大无码中文字幕| 成人男女网18免费视频| 亚洲码欧美码一区二区三区| 国产精品深夜福利免费观看| 四虎影视久久久免费观看| 亚洲精品乱码久久久久久| 国产精品免费一区二区三区四区| 亚洲视频在线观看一区| 99久久99久久精品免费看蜜桃| 久久精品国产亚洲av麻豆图片| 毛片a级毛片免费播放100| 亚洲aⅴ天堂av天堂无码麻豆| 免费人成视频x8x8入口| 岛国精品一区免费视频在线观看| 亚洲免费在线播放| 国内自产少妇自拍区免费| 免费国产污网站在线观看不要卡 | 在线观看免费毛片| 免费无码国产在线观国内自拍中文字幕 | 99re视频精品全部免费| 亚洲人成电影在线观看网 | 综合亚洲伊人午夜网 | 亚洲女女女同性video| 亚洲国产婷婷综合在线精品| 日韩成人免费视频| 亚洲免费综合色在线视频| 国产日韩成人亚洲丁香婷婷| 久久青草91免费观看| 亚洲AV无码男人的天堂| 亚洲桃色AV无码| 97在线线免费观看视频在线观看| 国产精品亚洲色婷婷99久久精品| 亚洲av无码专区国产乱码在线观看 | 亚洲熟女综合一区二区三区| 亚洲综合在线另类色区奇米| 国产一卡二卡四卡免费|