16.10 使用StringWriter和StringReader
使用StringWriter和StringReader类型我们可以将文本信息当作内存中的字符一样来处理。当想为基层缓冲区添加基于字符信息的时候,它们就非常有用。在下面的例子中,我们向一个StringWriter对象(而不是在本地硬盘上的一个文件)写入一段字符串信息:
static void Main(string[] args)
{
Console.WriteLine("***** Fun with StringWriter / StringReader *****\n");
// 创建一个StringWriter并把字符写入内存。
StringWriter strWriter = new StringWriter();
strWriter.WriteLine("Don't forget Mother's Day this year...");
strWriter.Close();
// 获取内容副本(存储在字符串中)并向控制台输出。
Console.WriteLine("Contents of StringWriter:\n{0}", strWriter);
}
因为StringWriter和StreamWriter都从一个基类(TextWriter)派生,或多或少它们的写操作逻辑代码有点相同。但需要知道,StringWriter还有一个特点,那就是它能通过GetStringBuilder()方法来获取一个System.Text.StringBuilder对象:
static void Main(string[] args)
{
Console.WriteLine("***** Fun with StringWriter / StringReader *****\n");
// 创建一个StringWriter并把字符写入内存。
StringWriter strWriter = new StringWriter();
...
// 得到内部的StringBuilder。
StringBuilder sb = strWriter.GetStringBuilder();
sb.Insert(0, "Hey!! ");
Console.WriteLine("-> {0}", sb.ToString());
sb.Remove(0, "Hey!! ".Length);
Console.WriteLine("-> {0}", sb.ToString());
}
可使用相应的StringReader类型从字符数据流中读取信息,可以看到,实现方法和相关的StreamReader类型差不多。其实,StringReader类只不过是通过重写派生的成员来从一段字符数据而不是从一个文件中读取信息,代码如下:
static void Main(string[] args)
{
Console.WriteLine("***** Fun with StringWriter / StringReader *****\n");
// 创建一个StringWriter并把字符写入内存。
StringWriter strWriter = new StringWriter();
...
// 从StringWriter读取数据。
StringReader strReader = new StringReader(writer.ToString());
string input = null;
while ((input = strReader.ReadLine()) != null)
{
Console.WriteLine (input);
}
strReader.Close();
}
源代码 StringReaderWriterApp项目的源代码位于Chapter 16子目录下。






