如何将StringBuilder转换为StreamReader?

7
如何将StringBuilder转换为流?
我的StringBuilder需要转换为流:
StreamReader stream = ????

更新

我尝试使用StringReader,像这样:

StringReader sr = new StringReader(sb.ToString());
StreamReader stream = new StreamReader(sr);

但这不起作用吗?

2个回答

9
使用ToString将StringBuilder转换为String,并使用StringReader将String包装为Stream。

1
但是一个StreamReader不能使用StringReader吗? - Blankman
6
如果你有控制权的话,让函数接受TextReader(而不是StreamReader),因为TextReader是两者的基类。否则,你可能需要使用Qua发布的代码。 - Andy Jacobs

7
如果需要使用StreamReader,则将字符串转换为内存流,然后使用该对象创建一个新的StreamReader:
StreamReader reader= new StreamReader(
                new MemoryStream(Encoding.ASCII.GetBytes(sb.ToString())));

3
这将导致在内存中进行两次不必要的分配和数据复制(一次由于 sb.ToString(),另一次由于 GetBytes())。更好的方法是子类化 TextReader 并实现通过直接从 StringBuilder 实例读取来完成。 - Dai

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接