Dan*_*ark 6 .net c# memorystream stream
我一直想知道Stream在C#.Net中使用类的最佳实践是什么.提供已写入或提供的流是否更好?即:
public Stream DoStuff(...)
{
var retStream = new MemoryStream();
//Write to retStream
return retStream;
}
Run Code Online (Sandbox Code Playgroud)
而不是;
public void DoStuff(Stream myStream, ...)
{
//write to myStream directly
}
Run Code Online (Sandbox Code Playgroud)
为了生命周期控制,我总是使用前一个例子,但我有这种感觉,Stream因为缺少一个更好的词,这是一种"流式传输"的糟糕方式.
我更喜欢"第二种方式"(在提供的流上运行),因为它有一些明显的优点:
Stream提供操作).Stream现在或以后很容易被抽象为扩展方法.此外,如果你要返回一个新的流(选项1),你会觉得有点奇怪,你必须Seek再次首先才能从中读取它(除非你在方法本身中这样做,这是次优的再一次,因为它可能并不总是需要 - 在所有情况下都可能无法从中读取流.不必Seek通过已经存在的流明确写入流的方法后,似乎不那么尴尬.
我看到 Streams 的好处是你不需要知道你正在流式传输到什么。
在第二个示例中,您的代码可能正在写入内存,也可能直接写入文件或某个网络缓冲区。从函数的角度来看,实际的输出目的地可以由调用者决定。
出于这个原因,我更喜欢第二种选择。
第一个功能只是写入内存。在我看来,如果它不返回流,而是返回实际的内存缓冲区会更清楚。如果他/她愿意,呼叫者然后可以附加一个内存流。
public byte[] DoStuff(...)
{
var retStream = new MemoryStream();
//Write to retStream
return retStream.ToArray();
}
Run Code Online (Sandbox Code Playgroud)