xml 中的二進位制資料

2021-06-16 15:36:52 字數 1823 閱讀 1009

本文是為zdnet翻譯的系列文章之一,原文已經發表在zdnet**

xml通常是用來描述文字資料的方法,例如元素本身給出文字的名稱,而元素的內容通常是基於文字的。然而有時候你也會遇到想將非文字的資料放到xml文件中的情況。讓我們檢查一下你可能使用的幾種方法。 

問題你可能想你只需要放置一些二進位制資料到開始和結束標籤裡面就萬事大吉了,不幸的是這可能導致幾個潛在的問題: 

·    xml中的新行符和空格字元將搞亂二進位制資料。 

·    二進位制資料可能包含null字元。 

·    二進位制資料可能包含「

這些問題既影響二進位制資料也影響xml解析。如果解析器不能決定如何繼續,你就不能提取任何資料。如果解析器「格式化」資料,那麼你就不能正確的處理那些二進位制資料。 

解決方案

解決這個問題至少有三種方案: 

·    使用cdata 標籤直接將二進位制資料嵌入xml文件。 

·    使用url引用二進位制資料。

·    將二進位制資料編碼為基於文字的格式然後再設定為xml元素的內容。 

二進位制嵌入

這個解決方案允許你直接將二進位制資料放到xml文件中。使用這個方法,你不用從乙個遠端系統取乙個檔案或者在使用前解碼,資料可以馬上處理。 

要使用這個方法,使用xml的cdata標籤,它是乙個特殊的標籤,用於處理那些在xml解析期間不能被解析的資料。基本上,你使用乙個開始標籤和乙個結束標籤表示二進位制資料的開始和結束位置就可以了。包含在cdata中的元素值將成為二進位制資料,例如: 

99238

super gidgetidoo

就像你看到的那樣, cdata標籤使用序列「」作為結束標籤。xml解析器忽略標籤之間的所有資料。 

不幸的是,這個方法有一些問題。首先,你可能遇到xml文件、解析器和你的二進位制資料使用的字符集的問題。其次,你的二進位制資料可能包含「]]>」序列,這會使得xml解析器以為它是不用解析資料的結束,雖然它實際不是二進位制資料的結尾,這是非常麻煩的情況。 

二進位制引用

可能最簡單的解決方案是將二進位制檔案放到可以通過網路訪問的伺服器然後使用乙個url引用它。使用引用允許你不用擔心對檔案進行編碼或者通過網路在xml檔案中傳送大檔案。它也允許你動態的更新檔案而不用傳送乙個新的xml文件。下面是乙個例子: 

二進位制編碼

有少量的方法可以讓你將二進位制的資料編碼為文字資料。基本上,這個處理使用乙個相對簡單的演算法將二進位制資料修改為ascii位元組。兩個最流行的二進位制編碼演算法是uuencode和base64編碼。 

二進位制編碼的乙個稱為mime的擴充套件版本用來新增檔案的編碼資訊(例如檔名)。編碼程式很容易得到,一般是作為共享軟體和程式設計工具。下面是將乙個二進位制編碼的檔案嵌入xml文件的例子: 

99238

super gidgetidoo

content-description: file encoded with encode64.exe.

content-disposition: attachment; filename=

"foo.zip"

content-transfer-encoding: base64

uesdbbqaaaaiagtams2/u6rniaaaaiyaaaakaaaaym

l0bwfwlmjtchpybwoaadmg1gbivihm

zjaaiwca8re+ciab/6iayj4auesbahqafaaaaagaa1oxlb+7

pgcgaaaahgaaaaoaaaaaaaaa

aaagalabaaaaagjpdg1hcc5ibxbqswugaaaaaa

eaaqa4aaaasaaaaaaa

xml轉二進位制

1.獲得選中的要轉換的類名,然後反射物件反序列化該型別用於xml反序列化 2.經過1得到了物件,然後使用序列化工具類反序列化為二進位制 xml轉二進位制 序列化工具類,請看文章 public class dataeditor assetdatabase.refresh editorutility.c...

二進位制 二進位制起源

現代通訊技術的基礎是二進位制編碼。早在1865年麥克斯韋總結出麥克斯韋方程組之前,美國人摩斯 morse 於1837年發明了摩斯電碼和有線電報。有線電報的出現,具有劃時代的意義 它讓人類獲得了一種全新的資訊傳遞方式,這種方式 看不見 摸不著 聽不到 完全不同於以往的信件 旗語 號角 烽火,這也是二進...

二進位制 二進位制中1的個數

題目 請實現乙個函式,輸入乙個整數,輸出該數二進位制表示中 1 的個數。例如,把 9 表示成二進位制是 1001,有 2 位是 1。因此,如果輸入 9,則該函式輸出 2。示例 1 輸入 00000000000000000000000000001011 輸出 3 解釋 輸入的二進位制串 0000000...