当前位置:  开发笔记 > Android > 正文

使用CDATA存储原始二进制流?

如何解决《使用CDATA存储原始二进制流?》经验,为你挑选了2个好方法。

而不是将二进制文件保存为Base64的开销,我想知道你是否可以直接将双字节二进制流存储到XML文件中,使用CDATA,或者将其注释掉,或者什么?



1> Pete Kirkham..:

Nul字符(C中的'\ 0')在XML中的任何位置都无效,即使是转义(�).


@Jeremy:他们不是.Null只是一个有效的XML字符,可能是因为流行的编程语言中以空字符结尾的字符串...

2> KrisWebDev..:

不,你不能单独使用CDATA在XML文件中注入二进制数据.

在XML1.0中(因为XML 1.1更宽松,但不是控制字符),以下限制适用于CDATA字符:

CData      ::=      (Char* - (Char* ']]>' Char*)) 
Char       ::=      #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF]

这意味着有几个字符是非法的,其中包括:

非法XML控制字符0x00到0x20,除了新行,回车符和制表符

非法UTF-8序列,如0xFF或非规范0b1100000x 0b10xxxxxx

除此之外,在没有CDATA的标准实体内容中:

"<"和">"使用是非法的

"&"使用受到限制(é可以,&zajdalkdza;不是)

所以CDATA只是通过限制"]]>"来允许"<",">"和"&"的一种方式.它没有解决非法的XML,Unicode和UTF-8字符问题,这是主要问题.

解决方案:

    使用Base64有33%的开销,但在所有编程语言中都有很大的支持,并且它是标准的事实

    使用仍然有限的实现BaseXML,但仅限20%的开销

    如果可能,请勿在XML中编码二进制数据,请单独传输

推荐阅读
wurtjq
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有