1、選擇ASN.1 的原因是什么?
選擇ASN.1 的一些原因是:
ASN.1 允許實(shí)現(xiàn)者選擇最適合他們的任何編程語(yǔ)言,并在該語(yǔ)言中選擇最適合其應(yīng)用程序的數(shù)據(jù)類(lèi)型的綁定。例如,如果 ASN.1將類(lèi)型定義為項(xiàng)目的集合,您可以自由地將其表示為鏈表、數(shù)組等,這取決于最適合您的語(yǔ)言/應(yīng)用程序的方式。
ASN.1允許您以這樣一種方式定義消息,即如果將來(lái)向消息中添加新字段,您不理解新字段的舊應(yīng)用程序?qū)⒗^續(xù)與理解新字段的新應(yīng)用程序一起正常工作。這樣您就不必同時(shí)將所有實(shí)現(xiàn)切換到消息的新版本。對(duì)于此類(lèi)消息,較舊的實(shí)現(xiàn)意識(shí)到他們應(yīng)該期望并忽略消息中的新字段。
ASN.1 允許您對(duì)消息中的字段施加約束。例如,您可以指示整數(shù)類(lèi)型應(yīng)該只攜帶值1、2、7-10,或者字符串的長(zhǎng)度應(yīng)該在20-30 個(gè)字節(jié)之間。
ASN.1 允許您表達(dá)消息字段之間的關(guān)系。例如,您可以指示如果給定字段包含 7,則必須存在另一個(gè)字段。
ASN.1 允許您定義OPTIONAL 字段,如果沒(méi)有數(shù)據(jù),則傳輸很少或不傳輸數(shù)據(jù)。
ASN.1 允許消息規(guī)范的作者(例如,標(biāo)準(zhǔn)編寫(xiě)者)以清晰簡(jiǎn)潔的方式向?qū)崿F(xiàn)者明確指出消息中字段的性質(zhì)。
ASN.1 讓協(xié)議設(shè)計(jì)人員能夠自由地描述消息的布局,而無(wú)需深入研究在兩臺(tái)機(jī)器之間傳輸?shù)臄?shù)據(jù)的位和字節(jié)細(xì)節(jié),從而提高了生產(chǎn)力。
通過(guò)使用正式的、可編譯的符號(hào)ASN.1 定義消息,可以通過(guò)使用將使用ASN.1 描述的消息轉(zhuǎn)換為C、C++或 Java等語(yǔ)言的工具以及編碼器/解碼器來(lái)提高生產(chǎn)力,以最小化或無(wú)需弄清楚如何序列化數(shù)據(jù)以進(jìn)行傳輸。
2、使用可擴(kuò)展性是否有任何權(quán)衡?
如果您希望中繼接收到的值(即,如果您希望解碼器將意外值返回給您,而不是被解碼器忽略),則使用可擴(kuò)展性將導(dǎo)致生成稍微復(fù)雜的頭文件。在大多數(shù)情況下,它足以滿(mǎn)足“舊”版本忽略從“新”版本收到的擴(kuò)展值,因?yàn)樗ǔ2恢廊绾翁幚硭鼈儭?/p>
就您的應(yīng)用程序代碼而言,通常它不會(huì)導(dǎo)致更大或更復(fù)雜的代碼。
如果您使用PER,如果您使用類(lèi)型可擴(kuò)展性,則編碼會(huì)稍大一些。類(lèi)型可擴(kuò)展性對(duì) BER 編碼的大小沒(méi)有影響。
除非您提前知道永遠(yuǎn)不需要擴(kuò)展給定類(lèi)型,否則您應(yīng)該將其定義為可擴(kuò)展的。
3、標(biāo)記會(huì)影響PER 中的編碼數(shù)據(jù)嗎?
一般來(lái)說(shuō),無(wú)論標(biāo)簽是什么,編碼數(shù)據(jù)看起來(lái)都是一樣的。
唯一的例外是選擇類(lèi)型的編碼。在 PER 中,選擇類(lèi)型的每個(gè)備選方案都由索引標(biāo)識(shí)。這些索引以取決于每個(gè)備選方案的標(biāo)簽的順序分配給備選方案。當(dāng)使用自動(dòng)標(biāo)記時(shí),索引確實(shí)對(duì)應(yīng)于備選方案的定義順序。
4、PER中的開(kāi)放類(lèi)型值是如何編碼的?
在PER中開(kāi)放類(lèi)型的編碼與無(wú)約束的OCTETSTRING類(lèi)型的值相同。這意味著長(zhǎng)度可以是一個(gè)或兩個(gè)字節(jié),或者如果長(zhǎng)度是>16K字節(jié),則編碼會(huì)被分割開(kāi)來(lái),等等。
審核編輯:劉清
-
解碼器
+關(guān)注
關(guān)注
9文章
1147瀏覽量
40932 -
JAVA
+關(guān)注
關(guān)注
19文章
2974瀏覽量
105147 -
編碼
+關(guān)注
關(guān)注
6文章
957瀏覽量
54951
原文標(biāo)題:?OSS Nokalva:ASN.1問(wèn)答時(shí)間(1)
文章出處:【微信號(hào):哲想軟件,微信公眾號(hào):哲想軟件】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論