图八中代码演示了把一个string数据转换为base64 编码的xml流。图九是输出的结果。
figure 8 persisting a string array as base64
using system;
using system.text;
using system.io;
using system.xml;
class mybase64array
{
public static void main(string[] args)
{
string outputfilename = "test64.xml";
if (args.length > 0)
outputfilename = args[0]; / file name
/ 把数组转换成xml
string[] thearray = {"rome", "new york", "sydney", "stockholm",
"paris"};
createoutput(thearray, outputfilename);
return;
}
private static void createoutput(string[] thearray, string filename)
{
/ 打开xml writer
xmltextwriter xmlw = new xmltextwriter(filename, null);
/使子元素根据 indentation 和 indentchar 设置缩进。此选项只对元素内容进行缩进
xmlw.formatting = formatting.indented;
/书写版本为“1.0”的 xml 声明
xmlw.writestartdocument();
/写出包含指定文本的注释 。
xmlw.writecomment("array to base64 xml");
/开始写出array节点
xmlw.writestartelement("array");
/写出具有指定的前缀、本地名称、命名空间 uri 和值的属性
xmlw.writeattributestring("xmlns", "x", null, "dinoe:msdn-mag");
/ 循环的写入array的子节点
foreach(string s in thearray)
{
/写出指定的开始标记并将其与给定的命名空间和前缀关联起来
xmlw.writestartelement("x", "element", null);
/把s转换成byte[]数组, 并把byte[]数组编码为 base64 并写出结果文本,要写入的字节数为s总长度的2倍,一个string占的字节数是2字节。
xmlw.writebase64(encoding.unicode.getbytes(s), 0, s.length*2);
/关闭子节点
xmlw.writeendelement();
}
/关闭根节点,只有两级
xmlw.writeenddocument();
/ 关闭writer
xmlw.close();
/ 读出写入的内容
xmltextreader reader = new xmltextreader(filname);
while(reader.read())
{
/获取节点名为element的节点
if (reader.localname == "element")
{
byte[] bytes = new byte[1000];
int n = reader.readbase64(bytes, 0, 1000);
string buf = encoding.unicode.getstring(bytes);
console.writeline(buf.substring(0,n));
}
}
reader.close();
}
}