我希望能够从从Stream派生的类中构建一个字符串。具体来说,我希望能够编写这样的代码:
void Print(Stream stream) {
// Some code that operates on a Stream.
}
void Main() {
StringStream stream = new StringStream();
Print(stream);
string myString = stream.GetResult();
}我可以创建一个名为StringStream的类来实现这一点吗?或者这样的类已经可用了?
更新:在我的示例中,方法Print是在第三方外部DLL中提供的.如您所见,Print所期望的论点是一个Stream。在打印到Stream之后,我希望能够以字符串的形式检索其内容。
发布于 2013-04-24 09:03:23
您可以使用MemoryStream和StreamReader类的串联:
void Main()
{
string myString;
using (var stream = new MemoryStream())
{
Print(stream);
stream.Position = 0;
using (var reader = new StreamReader(stream))
{
myString = reader.ReadToEnd();
}
}
}发布于 2011-11-15 22:01:30
既然Print()方法可能处理文本数据,那么可以重写它以接受TextWriter参数吗?
库提供StringWriter: TextWriter,但不提供StringStream。我想您可以通过包装一个MemoryStream来创建一个,但是它真的有必要吗?
更新后的:
void Main()
{
string myString; // outside using
using (MemoryStream stream = new MemoryStream ())
{
Print(stream);
myString = Encoding.UTF8.GetString(stream.ToArray());
}
...
}您可能希望将UTF8更改为ASCII,具体取决于Print()所使用的编码。
发布于 2011-11-15 22:00:32
可以使用StringWriter将值写入字符串。它提供了一个类似于流的语法(虽然不是从Stream派生的),它与底层的StringBuilder一起工作。
https://stackoverflow.com/questions/8143732
复制相似问题