【技術(shù)領(lǐng)域】
本申請(qǐng)涉及計(jì)算機(jī)領(lǐng)域,尤其涉及一種解碼方法及裝置。
背景技術(shù):
現(xiàn)有技術(shù)中,base64編碼及解碼是一種使用64個(gè)可打印字符來(lái)表示二進(jìn)制數(shù)據(jù)的表示方法,通常用作存儲(chǔ)、傳輸二進(jìn)制數(shù)據(jù)。base64編碼也是多用途互聯(lián)網(wǎng)郵件擴(kuò)展中的常見(jiàn)編碼方法。
在實(shí)現(xiàn)現(xiàn)有技術(shù)的過(guò)程中,發(fā)明人發(fā)現(xiàn)存在以下技術(shù)問(wèn)題:
不用服務(wù)商提供的解碼方法效率各自不同,說(shuō)明至少當(dāng)前的部分解碼方法解碼效率低,因此,需要提供一種高效率的base64解碼技術(shù)方案。
技術(shù)實(shí)現(xiàn)要素:
本申請(qǐng)實(shí)施例提供一種高效率的base64解碼方案。
具體的,base64解碼方法,包括:
將待解碼數(shù)據(jù)劃分為循環(huán)段數(shù)據(jù)和尾段數(shù)據(jù);
對(duì)所述循環(huán)段數(shù)據(jù)進(jìn)行解碼,生成循環(huán)段的解碼數(shù)據(jù);
對(duì)所述尾段數(shù)據(jù)進(jìn)行解碼,生成尾段的解碼數(shù)據(jù);
取出所述解碼數(shù)據(jù)。
本申請(qǐng)實(shí)施例還提供一種base64解碼裝置,包括:
劃分模塊,用于將待解碼數(shù)據(jù)劃分為循環(huán)段數(shù)據(jù)和尾段數(shù)據(jù);
循環(huán)解碼模塊,用于對(duì)所述循環(huán)段數(shù)據(jù)進(jìn)行解碼,生成循環(huán)段的解碼數(shù)據(jù);
尾段解碼模塊,用于對(duì)所述尾段數(shù)據(jù)進(jìn)行解碼,生成尾段的解碼數(shù)據(jù);
取出模塊,用于取出所述解碼數(shù)據(jù)。
本申請(qǐng)實(shí)施例提供的base64解碼方法和裝置,至少具有如下有益效果:
將待解碼數(shù)據(jù)劃分為循環(huán)段數(shù)據(jù)和尾段數(shù)據(jù),由于尾段數(shù)據(jù)不再參與解碼時(shí)的循環(huán)操作,提高了數(shù)據(jù)處理效率。
【附圖說(shuō)明】
此處所說(shuō)明的附圖用來(lái)提供對(duì)本申請(qǐng)的進(jìn)一步理解,構(gòu)成本申請(qǐng)的一部分,本申請(qǐng)的示意性實(shí)施例及其說(shuō)明用于解釋本申請(qǐng),并不構(gòu)成對(duì)本申請(qǐng)的不當(dāng)限定。在附圖中:
圖1為本申請(qǐng)實(shí)施例提供的base64解碼方法的過(guò)程示意圖。
圖2為本申請(qǐng)實(shí)施例提供的base64解碼裝置的結(jié)構(gòu)示意圖。
【具體實(shí)施方式】
為使本申請(qǐng)的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合本申請(qǐng)具體實(shí)施例及相應(yīng)的附圖對(duì)本申請(qǐng)技術(shù)方案進(jìn)行清楚、完整地描述。顯然,所描述的實(shí)施例僅是本申請(qǐng)一部分實(shí)施例,而不是全部的實(shí)施例。基于本申請(qǐng)中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒(méi)有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本申請(qǐng)保護(hù)的范圍。
本申請(qǐng)涉及base64編碼及解碼。base64編碼是一種使用64個(gè)可打印字符來(lái)表示二進(jìn)制數(shù)據(jù)的表示方法,通常用作存儲(chǔ)、傳輸二進(jìn)制數(shù)據(jù)。在base64中的可打印字符包括字母a-z、a-z、數(shù)字0-9,這樣共有62個(gè)字符,此外兩個(gè)可打印符號(hào)在不同的系統(tǒng)中一般有所不同。通常的base64另外2個(gè)字符是:“+”和“/”。這64個(gè)字符,如表1所示:
表1
下面以文本信息“man”舉例來(lái)說(shuō)明,“man”由“m”“a”“n”三個(gè)字母構(gòu)成的字符串。
下面給出該字符串中每個(gè)字母在ascii編碼中的對(duì)應(yīng)的碼值表示、二進(jìn)制表示、base64碼編號(hào)、base64碼的碼值,詳見(jiàn)表2。
表2
在base64編碼過(guò)程中,將ascii碼中3個(gè)字節(jié)的數(shù)據(jù),轉(zhuǎn)換為base64碼中4個(gè)字節(jié)數(shù)據(jù)。
然而,計(jì)算機(jī)中的數(shù)據(jù)存儲(chǔ)是按照8個(gè)bit作為一個(gè)單位來(lái)進(jìn)行存儲(chǔ)的。base64碼值t,編號(hào)19在計(jì)算機(jī)中以高位補(bǔ)0的方式進(jìn)行存儲(chǔ),表示為:00010011;base64碼值w,編號(hào)22在計(jì)算機(jī)中以高位補(bǔ)0的方式進(jìn)行存儲(chǔ),表示為:00010110;base64碼值f,編號(hào)5在計(jì)算機(jī)中以高位補(bǔ)0的方式進(jìn)行存儲(chǔ),表示為:00000101;base64碼值u,編號(hào)46在計(jì)算機(jī)中以高位補(bǔ)0的方式進(jìn)行存儲(chǔ),表示為:00101110。
在base64編碼過(guò)程中,文本的ascii碼中3個(gè)字節(jié)的數(shù)據(jù)可以恰好轉(zhuǎn)碼為base64碼中4個(gè)字節(jié)數(shù)據(jù)。那么有可能存在剩余ascii碼1個(gè)字節(jié)或剩余ascii碼2個(gè)字節(jié)的情形。
對(duì)于剩余1個(gè)字節(jié)或兩個(gè)字節(jié)的數(shù)據(jù),通常在二進(jìn)制中的后續(xù)位置補(bǔ)0的方式進(jìn)行以便得到對(duì)應(yīng)的base64碼值。在base64碼系統(tǒng)中不足4個(gè)字節(jié)的數(shù)據(jù),則通過(guò)補(bǔ)充“=”補(bǔ)足4個(gè)字節(jié)的數(shù)據(jù)。詳見(jiàn)表3和表4,以剩余1個(gè)字節(jié)為“a”和剩余2個(gè)字節(jié)為“bc”為例揭示了ascii碼不足3個(gè)字節(jié)的兩種情形。
表3
表4
以上揭示了base64編碼的過(guò)程,base64解碼恰好與之相反。
請(qǐng)參照?qǐng)D1所示,為本申請(qǐng)揭示的base64解碼方法過(guò)程示意圖。
s100:將待解碼數(shù)據(jù)劃分為循環(huán)段數(shù)據(jù)和尾段數(shù)據(jù)。
通過(guò)以上base64編碼過(guò)程可以看出,待解碼數(shù)據(jù)的末尾可能剩余0個(gè)字節(jié)、2個(gè)字節(jié)或3個(gè)字節(jié)。因此,在相反的解碼過(guò)程中,需要對(duì)補(bǔ)償字節(jié)的數(shù)據(jù)進(jìn)行處理。
在尾段數(shù)據(jù)的處理中,需要使用if語(yǔ)句進(jìn)行條件判斷,補(bǔ)償字節(jié)的情形屬于剩余0個(gè)字節(jié)、2個(gè)字節(jié)或3個(gè)字節(jié)中哪種具體情形。在本申請(qǐng)中,將待解碼數(shù)據(jù)區(qū)分為循環(huán)段數(shù)據(jù)和尾段數(shù)據(jù)。
對(duì)于循環(huán)段數(shù)據(jù)使用for語(yǔ)句來(lái)循環(huán)尋址與賦值。使用的for語(yǔ)句形如:
其中,“i+=4”或者也可以使用“i++”進(jìn)行循環(huán)尋址,循環(huán)對(duì)參數(shù)obufcount進(jìn)行賦值,從而完成待解碼數(shù)據(jù)中每一個(gè)字節(jié)的解碼。
進(jìn)一步的,在本申請(qǐng)?zhí)峁┑囊环N實(shí)施例中,將待解碼數(shù)據(jù)劃分為循環(huán)段數(shù)據(jù)和尾段數(shù)據(jù),具體包括:
將待解碼數(shù)據(jù)字節(jié)數(shù)減四,作為循環(huán)段數(shù)據(jù),余下部分作為尾段數(shù)據(jù)。
這樣,循環(huán)段數(shù)據(jù)不使用if語(yǔ)句進(jìn)行條件判斷,以判明補(bǔ)償字節(jié)的具體情形。從而,可以提高計(jì)算機(jī)處理數(shù)據(jù)的效率。
s200:對(duì)所述循環(huán)段數(shù)據(jù)進(jìn)行解碼,生成循環(huán)段的解碼數(shù)據(jù)。
對(duì)于循環(huán)段數(shù)據(jù),可以使用for語(yǔ)句中的i++進(jìn)行循環(huán)尋址,以完成參數(shù)的賦值操作。
進(jìn)一步的,在本申請(qǐng)?zhí)峁┑囊环N實(shí)施例中,對(duì)所述循環(huán)段數(shù)據(jù)進(jìn)行解碼,生成循環(huán)段的解碼數(shù)據(jù),具體包括:
使用for語(yǔ)句中i+=4進(jìn)行循環(huán)尋址,一次循環(huán)完成四個(gè)字節(jié)的數(shù)據(jù)的解碼。
在本申請(qǐng)中,使用for語(yǔ)句中i+=4進(jìn)行循環(huán)尋址,相較于使用for語(yǔ)句中i++尋址,可以提升計(jì)算機(jī)數(shù)據(jù)處理的效率。具體的,for語(yǔ)句中i++時(shí),每完成一次尋址、賦值迭代計(jì)算一次,而每次迭代需要一定時(shí)間,從而耗費(fèi)的運(yùn)算時(shí)間長(zhǎng)。而使用for語(yǔ)句中i+=4進(jìn)行循環(huán)尋址,相對(duì)于i++減少迭代次數(shù)75%,從而可以大幅提高運(yùn)算效率。而具體采用i+=4則與base64碼系統(tǒng)中,4個(gè)字節(jié)為1個(gè)處理單元有關(guān)。
從base64編碼過(guò)程中可以看出,雖然base64碼編號(hào)是6個(gè)bit的數(shù)據(jù),但是一個(gè)存儲(chǔ)單元為8個(gè)bit,因此,一個(gè)base64碼值由兩個(gè)補(bǔ)0的高位和6個(gè)bit數(shù)據(jù)構(gòu)成。因此,還需要在進(jìn)一步尋址的基礎(chǔ)上,進(jìn)行剔除補(bǔ)0的數(shù)據(jù)的操作,并進(jìn)行拼接才能生成3個(gè)字節(jié)的ascii碼數(shù)據(jù)。
s300:對(duì)所述尾段數(shù)據(jù)進(jìn)行解碼,生成尾段的解碼數(shù)據(jù)。
對(duì)于待解碼數(shù)據(jù)中的尾段數(shù)據(jù),則使用if語(yǔ)句判斷末尾補(bǔ)償字節(jié)數(shù)。這里的補(bǔ)償字節(jié)對(duì)應(yīng)編碼后形成的待解碼數(shù)據(jù)。具體的,補(bǔ)償字節(jié)數(shù)可以為0,對(duì)應(yīng)base64格式的數(shù)據(jù)按照4個(gè)字節(jié)為1個(gè)單元解碼時(shí),無(wú)剩余字節(jié)的情形;補(bǔ)償字節(jié)數(shù)可以為1,對(duì)應(yīng)base64格式的數(shù)據(jù)按照4個(gè)字節(jié)為1個(gè)單元解碼時(shí),剩余3個(gè)字節(jié)的情形;補(bǔ)償字節(jié)數(shù)可以為2,對(duì)應(yīng)base64格式的數(shù)據(jù)按照4個(gè)字節(jié)為1個(gè)單元解碼時(shí),剩余2個(gè)字節(jié)的情形。補(bǔ)償字節(jié)通??梢砸源a值“=”表示。
在解碼過(guò)程中,將補(bǔ)償字節(jié)剔除,可以生成對(duì)應(yīng)的實(shí)際碼值。同樣,這里的碼值在存儲(chǔ)過(guò)程中存在兩個(gè)高位補(bǔ)充的0,在此基礎(chǔ)上,進(jìn)一步剔除由于存儲(chǔ)高位補(bǔ)充的0以及二級(jí)制中末尾補(bǔ)位的0,可以生成對(duì)應(yīng)的尾段的解碼數(shù)據(jù)。
s400:取出所述解碼數(shù)據(jù)。
計(jì)算機(jī)可以讀取出所述解碼數(shù)據(jù)。
對(duì)應(yīng)于使用for語(yǔ)句中i+=4進(jìn)行循環(huán)尋址,一次循環(huán)完成四個(gè)字節(jié)的數(shù)據(jù)的解碼,一次性讀取出三個(gè)字節(jié)的解碼數(shù)據(jù)。同樣,這里由于沒(méi)有使用i++,讀取過(guò)程中由于減少了迭代次數(shù),大幅提升了計(jì)算機(jī)進(jìn)行base64解碼的效率。
在進(jìn)行取出解碼數(shù)據(jù)操作過(guò)程中,假定一個(gè)數(shù)據(jù)長(zhǎng)度,使用system.arraycopy復(fù)制一個(gè)數(shù)據(jù)組的數(shù)據(jù)。當(dāng)數(shù)據(jù)量超過(guò)預(yù)設(shè)數(shù)據(jù)組長(zhǎng)度時(shí),使用下一個(gè)數(shù)據(jù)組繼續(xù)進(jìn)行復(fù)制。最后一個(gè)數(shù)據(jù)組中通常有部分空白。然后,根據(jù)數(shù)據(jù)組中數(shù)據(jù)的操作記錄,計(jì)算最后一個(gè)數(shù)據(jù)組中的實(shí)際存在的數(shù)據(jù)。最后再使用system.arraycopy定義一個(gè)與最后一個(gè)數(shù)據(jù)組中實(shí)際存在的數(shù)據(jù)量對(duì)應(yīng)的數(shù)據(jù)組,將實(shí)際存在的數(shù)據(jù)取出。
進(jìn)一步的,在本申請(qǐng)?zhí)峁┑牧硪环N實(shí)施例中,取出所述解碼數(shù)據(jù),具體包括:
計(jì)算采用base64解碼時(shí)待解碼數(shù)據(jù)的補(bǔ)償字節(jié)數(shù);
根據(jù)補(bǔ)償字節(jié)數(shù),確定所述解碼數(shù)據(jù)的數(shù)據(jù)量;
取出確定的所述數(shù)據(jù)量的所述解碼數(shù)據(jù)。
這里的補(bǔ)償字節(jié)對(duì)應(yīng)編碼后形成的待解碼數(shù)據(jù)。具體的,補(bǔ)償字節(jié)數(shù)可以為0,對(duì)應(yīng)base64格式的數(shù)據(jù)按照4個(gè)字節(jié)為1個(gè)單元解碼時(shí),無(wú)剩余字節(jié)的情形;補(bǔ)償字節(jié)數(shù)可以為1,對(duì)應(yīng)base64格式的數(shù)據(jù)按照4個(gè)字節(jié)為1個(gè)單元解碼時(shí),剩余3個(gè)字節(jié)的情形;補(bǔ)償字節(jié)數(shù)可以為2,對(duì)應(yīng)base64格式的數(shù)據(jù)按照4個(gè)字節(jié)為1個(gè)單元解碼時(shí),剩余2個(gè)字節(jié)的情形。
進(jìn)一步的,在本申請(qǐng)?zhí)峁┑牧硪环N實(shí)施例中,計(jì)算采用base64解碼時(shí)待解碼數(shù)據(jù)的補(bǔ)償字節(jié)數(shù),具體包括:
判斷待解碼數(shù)據(jù)的倒數(shù)第二個(gè)字節(jié)的碼值是否對(duì)應(yīng)補(bǔ)償符號(hào);
當(dāng)所述待解碼數(shù)據(jù)的倒數(shù)第二個(gè)字節(jié)的碼值對(duì)應(yīng)補(bǔ)償符號(hào)時(shí),確定補(bǔ)償字節(jié)數(shù)為二;
否則,判斷待解碼數(shù)據(jù)的倒數(shù)第一個(gè)字節(jié)的碼值是否對(duì)應(yīng)補(bǔ)償符號(hào);
當(dāng)所述待解碼數(shù)據(jù)的倒數(shù)第一個(gè)字節(jié)的碼值對(duì)應(yīng)補(bǔ)償符號(hào)時(shí),確定補(bǔ)償字節(jié)數(shù)為一;
否則,確定補(bǔ)償字節(jié)數(shù)為零。
這里的補(bǔ)償符號(hào)根據(jù)具體的使用情形而可以有所不同。通常這里的補(bǔ)償符號(hào)可以為“=”。當(dāng)然,也可是其他表征待解碼數(shù)據(jù)補(bǔ)償?shù)姆?hào)。在本申請(qǐng)?zhí)峁┑募夹g(shù)方案中,優(yōu)先進(jìn)行倒數(shù)第二個(gè)字節(jié)的判斷,提高了判斷的效率。具體來(lái)說(shuō),只要倒數(shù)第二個(gè)字節(jié)的碼值對(duì)應(yīng)補(bǔ)償符號(hào)時(shí),則可以確定補(bǔ)償字節(jié)數(shù)為二,而不必判斷倒數(shù)第一個(gè)字節(jié)是否對(duì)應(yīng)補(bǔ)償符號(hào),從而提高了判斷的效率。
進(jìn)一步的,在本申請(qǐng)?zhí)峁┑牧硪环N實(shí)施例中,根據(jù)補(bǔ)償字節(jié)數(shù),確定所述解碼數(shù)據(jù)的數(shù)據(jù)量,具體包括:
確定所述解碼數(shù)據(jù)的數(shù)據(jù)量為:base64碼字節(jié)數(shù)的3/4與補(bǔ)償字節(jié)數(shù)兩者的差值。
在本申請(qǐng)?zhí)峁┑膶?shí)施方式中,將待解碼數(shù)據(jù)劃分為循環(huán)段數(shù)據(jù)和尾段數(shù)據(jù),由于尾段數(shù)據(jù)不再參與解碼時(shí)的循環(huán)操作,提高了數(shù)據(jù)處理效率。
下面介紹一種本申請(qǐng)?zhí)峁┑腷ase64解碼方法的具體應(yīng)用場(chǎng)景:
將待解碼數(shù)據(jù)字節(jié)數(shù)減四,作為循環(huán)段數(shù)據(jù),余下部分作為尾段數(shù)據(jù)。對(duì)于循環(huán)段數(shù)據(jù),使用for語(yǔ)句中i+=4進(jìn)行循環(huán)尋址,一次循環(huán)完成四個(gè)字節(jié)的數(shù)據(jù)的解碼。多次循環(huán)完成循環(huán)段數(shù)據(jù)的解碼。在具體的解碼過(guò)程中,將一個(gè)存儲(chǔ)單元,即4個(gè)字節(jié)——32個(gè)bit的數(shù)據(jù)存入緩存。剔除每個(gè)字節(jié)中高位補(bǔ)位的0,進(jìn)行拼接生成3個(gè)字節(jié)——24bit的ascii碼數(shù)據(jù)。對(duì)于尾段數(shù)據(jù),使用if語(yǔ)句判斷將待解碼數(shù)據(jù)末尾補(bǔ)償字節(jié)數(shù)。然后,剔除待解碼數(shù)據(jù)中末尾補(bǔ)償字符,并進(jìn)一步剔除二進(jìn)制下補(bǔ)位的0,生成2個(gè)字節(jié)——16bit的ascii碼數(shù)據(jù),或1個(gè)字節(jié)——8bit的ascii碼數(shù)據(jù)。計(jì)算待解碼數(shù)據(jù)解碼完成后的數(shù)據(jù)量,即待解碼數(shù)據(jù)字節(jié)數(shù)的3/4與補(bǔ)償字節(jié)數(shù)兩者的差值。從緩沖中復(fù)制出數(shù)據(jù)量大小的解碼數(shù)據(jù)。
表5揭示了使用不同服務(wù)商提供的解碼方法,對(duì)不同大小的數(shù)據(jù)進(jìn)行100萬(wàn)次實(shí)驗(yàn)時(shí)的解碼時(shí)間。
測(cè)試環(huán)境:
cpu:inteli52.6ghz
內(nèi)存:ddr31600mhz8gb
jvm配置:-xx:maxpermsize=256m-xms40m-xmx512m
表5
以上是本申請(qǐng)實(shí)施例提供的base64解碼方法,基于同樣的思路,請(qǐng)參照?qǐng)D2,本申請(qǐng)還提供一種base64解碼裝置,包括:
劃分模塊,用于將待解碼數(shù)據(jù)劃分為循環(huán)段數(shù)據(jù)和尾段數(shù)據(jù);
循環(huán)解碼模塊,用于對(duì)所述循環(huán)段數(shù)據(jù)進(jìn)行解碼,生成循環(huán)段的解碼數(shù)據(jù);
尾段解碼模塊,用于對(duì)所述尾段數(shù)據(jù)進(jìn)行解碼,生成尾段的解碼數(shù)據(jù);
取出模塊,用于取出所述解碼數(shù)據(jù)。
在本申請(qǐng)中,將待解碼數(shù)據(jù)劃分為循環(huán)段數(shù)據(jù)和尾段數(shù)據(jù),由于尾段數(shù)據(jù)不再參與解碼時(shí)的循環(huán)操作,提高了數(shù)據(jù)處理效率。
進(jìn)一步的,在本申請(qǐng)?zhí)峁┑牧硪环N實(shí)施例中,所述劃分模塊,具體用于:
將待解碼數(shù)據(jù)字節(jié)數(shù)減四,作為循環(huán)段數(shù)據(jù),余下部分作為尾段數(shù)據(jù)。
這樣,循環(huán)段數(shù)據(jù)不使用if語(yǔ)句進(jìn)行條件判斷,以判明補(bǔ)償字節(jié)的具體情形。從而,可以提高計(jì)算機(jī)處理數(shù)據(jù)的效率。
進(jìn)一步的,在本申請(qǐng)?zhí)峁┑牧硪环N實(shí)施例中,所述循環(huán)解碼模塊具體用于:
使用for語(yǔ)句中i+=4進(jìn)行循環(huán)尋址,一次循環(huán)完成四個(gè)字節(jié)的數(shù)據(jù)的解碼。
在本申請(qǐng)中,使用for語(yǔ)句中i+=4進(jìn)行循環(huán)尋址,相較于使用for語(yǔ)句中i++尋址,可以提升計(jì)算機(jī)數(shù)據(jù)處理的效率。具體的,for語(yǔ)句中i++時(shí),每完成一次尋址、賦值迭代計(jì)算一次,而每次迭代需要一定時(shí)間,從而耗費(fèi)的運(yùn)算時(shí)間長(zhǎng)。而使用for語(yǔ)句中i+=4進(jìn)行循環(huán)尋址,相對(duì)于i++減少迭代次數(shù)75%,從而可以大幅提高運(yùn)算效率。而具體采用i+=4則與base64碼系統(tǒng)中,4個(gè)字節(jié)為1個(gè)處理單元有關(guān)。
進(jìn)一步的,在本申請(qǐng)?zhí)峁┑牧硪环N實(shí)施例中,所述取出模塊具體用于:
計(jì)算采用base64解碼時(shí)待解碼數(shù)據(jù)的補(bǔ)償字節(jié)數(shù);
根據(jù)補(bǔ)償字節(jié)數(shù),確定所述解碼數(shù)據(jù)的數(shù)據(jù)量;
取出確定的所述數(shù)據(jù)量的所述解碼數(shù)據(jù)。
這里的補(bǔ)償字節(jié)對(duì)應(yīng)編碼后形成的待解碼數(shù)據(jù)。具體的,補(bǔ)償字節(jié)數(shù)可以為0,對(duì)應(yīng)base64格式的數(shù)據(jù)按照4個(gè)字節(jié)為1個(gè)單元解碼時(shí),無(wú)剩余字節(jié)的情形;補(bǔ)償字節(jié)數(shù)可以為1,對(duì)應(yīng)base64格式的數(shù)據(jù)按照4個(gè)字節(jié)為1個(gè)單元解碼時(shí),剩余3個(gè)字節(jié)的情形;補(bǔ)償字節(jié)數(shù)可以為2,對(duì)應(yīng)base64格式的數(shù)據(jù)按照4個(gè)字節(jié)為1個(gè)單元解碼時(shí),剩余2個(gè)字節(jié)的情形。
進(jìn)一步的,在本申請(qǐng)?zhí)峁┑牧硪环N實(shí)施例中,所述取出模塊具體用于:
判斷待解碼數(shù)據(jù)的倒數(shù)第二個(gè)字節(jié)的碼值是否對(duì)應(yīng)補(bǔ)償符號(hào);
當(dāng)所述待解碼數(shù)據(jù)的倒數(shù)第二個(gè)字節(jié)的碼值對(duì)應(yīng)補(bǔ)償符號(hào)時(shí),確定補(bǔ)償字節(jié)數(shù)為二;
否則,判斷待解碼數(shù)據(jù)的倒數(shù)第一個(gè)字節(jié)的碼值是否對(duì)應(yīng)補(bǔ)償符號(hào);
當(dāng)所述待解碼數(shù)據(jù)的倒數(shù)第一個(gè)字節(jié)的碼值對(duì)應(yīng)補(bǔ)償符號(hào)時(shí),確定補(bǔ)償字節(jié)數(shù)為一;
否則,確定補(bǔ)償字節(jié)數(shù)為零。
這里的補(bǔ)償符號(hào)根據(jù)具體的使用情形而可以有所不同。通常這里的補(bǔ)償符號(hào)可以為“=”。當(dāng)然,也可是其他表征待解碼數(shù)據(jù)補(bǔ)償?shù)姆?hào)。在本申請(qǐng)?zhí)峁┑募夹g(shù)方案中,優(yōu)先進(jìn)行倒數(shù)第二個(gè)字節(jié)的判斷,提高了判斷的效率。具體來(lái)說(shuō),只要倒數(shù)第二個(gè)字節(jié)的碼值對(duì)應(yīng)補(bǔ)償符號(hào)時(shí),則可以確定補(bǔ)償字節(jié)數(shù)為二,而不必判斷倒數(shù)第一個(gè)字節(jié)是否對(duì)應(yīng)補(bǔ)償符號(hào),從而提高了判斷的效率。
進(jìn)一步的,在本申請(qǐng)?zhí)峁┑牧硪环N實(shí)施例中,所述取出模塊具體用于:
確定所述解碼數(shù)據(jù)的數(shù)據(jù)量為:base64碼字節(jié)數(shù)的3/4與補(bǔ)償字節(jié)數(shù)兩者的差值。
在本申請(qǐng)?zhí)峁┑膶?shí)施方式中,將待解碼數(shù)據(jù)劃分為循環(huán)段數(shù)據(jù)和尾段數(shù)據(jù),由于尾段數(shù)據(jù)不再參與解碼時(shí)的循環(huán)操作,提高了數(shù)據(jù)處理效率。
本領(lǐng)域內(nèi)的技術(shù)人員應(yīng)明白,本發(fā)明的實(shí)施例可提供為方法、系統(tǒng)、或計(jì)算機(jī)程序產(chǎn)品。因此,本發(fā)明可采用完全硬件實(shí)施例、完全軟件實(shí)施例、或結(jié)合軟件和硬件方面的實(shí)施例的形式。而且,本發(fā)明可采用在一個(gè)或多個(gè)其中包含有計(jì)算機(jī)可用程序代碼的計(jì)算機(jī)可用存儲(chǔ)介質(zhì)(包括但不限于磁盤(pán)存儲(chǔ)器、cd-rom、光學(xué)存儲(chǔ)器等)上實(shí)施的計(jì)算機(jī)程序產(chǎn)品的形式。
本發(fā)明是參照根據(jù)本發(fā)明實(shí)施例的方法、設(shè)備(系統(tǒng))、和計(jì)算機(jī)程序產(chǎn)品的流程圖和/或方框圖來(lái)描述的。應(yīng)理解可由計(jì)算機(jī)程序指令實(shí)現(xiàn)流程圖和/或方框圖中的每一流程和/或方框、以及流程圖和/或方框圖中的流程和/或方框的結(jié)合??商峁┻@些計(jì)算機(jī)程序指令到通用計(jì)算機(jī)、專用計(jì)算機(jī)、嵌入式處理機(jī)或其他可編程數(shù)值處理設(shè)備的處理器以產(chǎn)生一個(gè)機(jī)器,使得通過(guò)計(jì)算機(jī)或其他可編程數(shù)值處理設(shè)備的處理器執(zhí)行的指令產(chǎn)生用于實(shí)現(xiàn)在流程圖一個(gè)流程或多個(gè)流程和/或方框圖一個(gè)方框或多個(gè)方框中指定的功能的裝置。
這些計(jì)算機(jī)程序指令也可存儲(chǔ)在能引導(dǎo)計(jì)算機(jī)或其他可編程數(shù)值處理設(shè)備以特定方式工作的計(jì)算機(jī)可讀存儲(chǔ)器中,使得存儲(chǔ)在該計(jì)算機(jī)可讀存儲(chǔ)器中的指令產(chǎn)生包括指令裝置的制造品,該指令裝置實(shí)現(xiàn)在流程圖一個(gè)流程或多個(gè)流程和/或方框圖一個(gè)方框或多個(gè)方框中指定的功能。
這些計(jì)算機(jī)程序指令也可裝載到計(jì)算機(jī)或其他可編程數(shù)值處理設(shè)備上,使得在計(jì)算機(jī)或其他可編程設(shè)備上執(zhí)行一系列操作步驟以產(chǎn)生計(jì)算機(jī)實(shí)現(xiàn)的處理,從而在計(jì)算機(jī)或其他可編程設(shè)備上執(zhí)行的指令提供用于實(shí)現(xiàn)在流程圖一個(gè)流程或多個(gè)流程和/或方框圖一個(gè)方框或多個(gè)方框中指定的功能的步驟。
在一個(gè)典型的配置中,計(jì)算設(shè)備包括一個(gè)或多個(gè)處理器(cpu)、輸入/輸出接口、網(wǎng)絡(luò)接口和內(nèi)存。
內(nèi)存可能包括計(jì)算機(jī)可讀介質(zhì)中的非永久性存儲(chǔ)器,隨機(jī)存取存儲(chǔ)器(ram)和/或非易失性內(nèi)存等形式,如只讀存儲(chǔ)器(rom)或閃存(flashram)。內(nèi)存是計(jì)算機(jī)可讀介質(zhì)的示例。
計(jì)算機(jī)可讀介質(zhì)包括永久性和非永久性、可移動(dòng)和非可移動(dòng)媒體可以由任何方法或技術(shù)來(lái)實(shí)現(xiàn)信息存儲(chǔ)。信息可以是計(jì)算機(jī)可讀指令、數(shù)值結(jié)構(gòu)、程序的模塊或其他數(shù)值。計(jì)算機(jī)的存儲(chǔ)介質(zhì)的例子包括,但不限于相變內(nèi)存(pram)、靜態(tài)隨機(jī)存取存儲(chǔ)器(sram)、動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器(dram)、其他類(lèi)型的隨機(jī)存取存儲(chǔ)器(ram)、只讀存儲(chǔ)器(rom)、電可擦除可編程只讀存儲(chǔ)器(eeprom)、快閃記憶體或其他內(nèi)存技術(shù)、只讀光盤(pán)只讀存儲(chǔ)器(cd-rom)、數(shù)字多功能光盤(pán)(dvd)或其他光學(xué)存儲(chǔ)、磁盒式磁帶,磁帶磁磁盤(pán)存儲(chǔ)或其他磁性存儲(chǔ)設(shè)備或任何其他非傳輸介質(zhì),可用于存儲(chǔ)可以被計(jì)算設(shè)備訪問(wèn)的信息。按照本文中的界定,計(jì)算機(jī)可讀介質(zhì)不包括暫存電腦可讀媒體(transitorymedia),如調(diào)制的數(shù)值信號(hào)和載波。
還需要說(shuō)明的是,術(shù)語(yǔ)“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過(guò)程、方法、商品或者設(shè)備不僅包括那些要素,而且還包括沒(méi)有明確列出的其他要素,或者是還包括為這種過(guò)程、方法、商品或者設(shè)備所固有的要素。在沒(méi)有更多限制的情況下,由語(yǔ)句“包括一個(gè)……”限定的要素,并不排除在包括所述要素的過(guò)程、方法、商品或者設(shè)備中還存在另外的相同要素。
本領(lǐng)域技術(shù)人員應(yīng)明白,本申請(qǐng)的實(shí)施例可提供為方法、系統(tǒng)或計(jì)算機(jī)程序產(chǎn)品。因此,本申請(qǐng)可采用完全硬件實(shí)施例、完全軟件實(shí)施例或結(jié)合軟件和硬件方面的實(shí)施例的形式。而且,本申請(qǐng)可采用在一個(gè)或多個(gè)其中包含有計(jì)算機(jī)可用程序代碼的計(jì)算機(jī)可用存儲(chǔ)介質(zhì)(包括但不限于磁盤(pán)存儲(chǔ)器、cd-rom、光學(xué)存儲(chǔ)器等)上實(shí)施的計(jì)算機(jī)程序產(chǎn)品的形式。
以上所述僅為本申請(qǐng)的實(shí)施例而已,并不用于限制本申請(qǐng)。對(duì)于本領(lǐng)域技術(shù)人員來(lái)說(shuō),本申請(qǐng)可以有各種更改和變化。凡在本申請(qǐng)的精神和原理之內(nèi)所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本申請(qǐng)的權(quán)利要求范圍之內(nèi)。