Stream Class - 将它用于Helper方法的任何类型的数据?

时间:2012-01-19 20:40:55

标签: c# .net stream

我想创建一个辅助方法,它可以接收任何类型的流数据(来自XML,数据库,文件等),以便我们可以将流转换为返回的字符串。

所以我的想法是伪形式的:

public GetStreamText(Stream stream)
{
     string data = string.Empty;

     // convert the stream to string and set it to the data variable

     return data;

}

现在让这个助手可用的目的是我们从文件中获取HTML内容。稍后我们希望这可以用于从数据库或其他来源获取该内容。所以我试图使这个可重用(通用)足够,以至于我不必在整个地方创建一堆其他方法或冗余代码。

所以我可以从响应中发送一个文件,一个xml doc和xml信封等。

我不确定Stream是否如此通用,以至于使用流的每种类型的对象都继承了它。但我认为是。

所以我不确定从哪里开始确定如何处理这个问题。

3 个答案:

答案 0 :(得分:3)

StreamReader类不会满足您的目的吗?

public string GetStreamText(Stream stream)
{
    using (var reader = new StreamReader(stream))
        return reader.ReadToEnd();
}

修改:精心设计......

流本质上是字节序列的抽象视图。不同类型的流旨在适应不同的数据源:FileStream从磁盘上的文件读取字节,从内存中读取MemoryStream,从网络(如Internet)读取NetworkStream,等等。可以表示为字节序列的所有内容都可以封装在流中。

几乎所有东西都可以表示为一个字节序列 - 这是所有数字计算的基础 - 但并非所有东西都可以表示为一系列文本字符,这是你需要小心的“普遍方法“。假设我给你一个图像数据流。您可以将其转换为String,但内容似乎是垃圾,因为它并不意味着这样解释。

简而言之:是的,Stream旨在处理任何类型的数据。另一方面,String不是。

答案 1 :(得分:1)

为了提供处理任何流的通用格式,您需要将其视为二进制数据。然后,您可以将二进制数据base64编码为字符串。您可以使用converse从base64编码的文本创建流。这允许您与任何类型的流的字符串值进行双向转换。

答案 2 :(得分:0)

StreamReader接受基类型Stream:

的参数
   StreamReader reader = new StreamReader(stream);
   string text = reader.ReadToEnd();