读写流
有趣的是,reader(阅读器)和writer类提供了基于base64 和binhex编码的读写数据流的方法。writebase64 和 writebinhex方法的功能与其它的写方法的功能存在着细微的差别。它们都是基于流的,这两个方法的功能像一个byte数组而不是一个string。下面的代码首先把一个string转换成一个byte数组,然后把它们写成一个base64 编码流。encoding类的getbytes静态方法完成转换的任务:
writer.writebase64(
encoding.unicode.getbytes(buf),
0, buf.length*2);
图八中代码演示了把一个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();
}
}
figure 9 string array in inte.net explorer
reader类有专门的解释base64和binhex编码流的方法。下面的代码片断演示了怎么样用xmltextreader类的readbase64方法解析用base64和binhex编码集创建的文档。
xmltextreader reader = new xmltextreader(filename);
while(reader.read()) {
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();
从byte型转换成string型是通过encoding类的getstring方法实现的。尽管我只介绍了基于base64编码集的代码,但是可以简单的用binhex替换方法名就可以实现读基于binhex编码的节点内容(用readbinhex方法)。这个技巧也可以用于读任何用byte数据形式表示的二进制数据,尤其是image类型的数据。
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器