首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >StringStream in C#

StringStream in C#
EN

Stack Overflow用户
提问于 2011-11-15 21:57:48
回答 6查看 132K关注 0票数 55

我希望能够从从Stream派生的类中构建一个字符串。具体来说,我希望能够编写这样的代码:

代码语言:javascript
复制
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之后,我希望能够以字符串的形式检索其内容。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2013-04-24 09:03:23

您可以使用MemoryStreamStreamReader类的串联:

代码语言:javascript
复制
void Main()
{
    string myString;

    using (var stream = new MemoryStream())
    {
        Print(stream);

        stream.Position = 0;
        using (var reader = new StreamReader(stream))
        {
            myString = reader.ReadToEnd();
        }
    }
}
票数 49
EN

Stack Overflow用户

发布于 2011-11-15 22:01:30

既然Print()方法可能处理文本数据,那么可以重写它以接受TextWriter参数吗?

库提供StringWriter: TextWriter,但不提供StringStream。我想您可以通过包装一个MemoryStream来创建一个,但是它真的有必要吗?

更新后的

代码语言:javascript
复制
void Main() 
{
  string myString;  // outside using

  using (MemoryStream stream = new MemoryStream ())
  {
     Print(stream);
     myString = Encoding.UTF8.GetString(stream.ToArray());
  }
  ... 

}

您可能希望将UTF8更改为ASCII,具体取决于Print()所使用的编码。

票数 37
EN

Stack Overflow用户

发布于 2011-11-15 22:00:32

可以使用StringWriter将值写入字符串。它提供了一个类似于流的语法(虽然不是从Stream派生的),它与底层的StringBuilder一起工作。

票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8143732

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档