二进制编码
有少量的方法可以让你将二进制的数据编码为文本数据。基本上,这个处理使用一个相对简单的算法将二进制数据修改为ASCII字节。两个最流行的二进制编码算法是Uuencode和base64编码。
二进制编码的一个称为MIME的扩展版本用来添加文件的编码信息(例如文件名)。编码程序很容易得到,一般是作为共享软件和编程工具。下面是将一个二进制编码的文件嵌入XML文档的例子:
<Product>
<SKU>99238</SKU>
<Description>Super Gidgetidoo</Description>
<Picture>
Content-Description: File encoded with ENCODE64.EXE.
Content-Disposition: attachment; filename="foo.zip"
Content-Transfer-Encoding: BASE64
Content-Type: application/octet-stream
UEsDBBQAAAAIAGtaMS2/u6RnIAAAAIYAAAAKAAAAYm
l0bWFwLmJtcHPybWOAADMg1gBiVihm
ZJAAiwcA8RE+CIaB/6iAYj4AUEsBAhQAFAAAAAgAa1oxLb+7
pGcgAAAAhgAAAAoAAAAAAAAA
AAAgALaBAAAAAGJpdG1hcC5ibXBQSwUGAAAAAA
EAAQA4AAAASAAAAAAA
</Picture>
</Product>
例:
try
{
int readbyte = 0; //
int bytestoread = 100; //数据缓冲区大小
string filename = "../../writexml.xml"; //要打开的文档
// this.textbox1.text = string.empty;
// 打开图片文档,利用该图片构造一个文档流
filestream fs = new filestream("../../001.jpg",filemode.open);
// 使用文档流构造一个二进制读取器将基元数据读作二进制值
binaryreader br = new binaryreader(fs);
xmltextwriter xmltxtwt = new xmltextwriter(filename,encoding.utf8);
//输出配置 代码缩进
xmltxtwt.formatting = formatting.indented;
// xmltxtwt.indentation = 4;
//书写声明
xmltxtwt.writestartdocument();
xmltxtwt.writestartelement("picture","contactdetails","http://www.deltabis.com/contact");//定义命名空间
xmltxtwt.writestartelement("image"); //定义节点
xmltxtwt.writeattributestring("imagename","002.jpg"); //添加图片属性
byte[] base64buffer = new byte[bytestoread]; //开辟缓冲区
do
{
readbyte = br.read(base64buffer,0,bytestoread); //将数据读入字节数组
xmltxtwt.writebase64(base64buffer,0,readbyte); //将数组中二进制值编码为base64并写出到xml文档
}while(bytestoread <= readbyte);
xmltxtwt.writeendelement();
xmltxtwt.writeendelement();
xmltxtwt.writeenddocument();
// xmltxtwt.flush();
xmltxtwt.close();
messagebox.show("读写结束!");
// this.textbox1.text = readxml(filename);
}
catch(exception ex)
{
messagebox.show(ex.tostring());
}