我想创建一个辅助方法,它可以接收任何类型的流数据(来自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是否如此通用,以至于使用流的每种类型的对象都继承了它。但我认为是。
所以我不确定从哪里开始确定如何处理这个问题。
答案 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();