如何从.NET中的Stream一个MemoryStream? [英] How to get a MemoryStream from a Stream in .NET?
问题描述
我有打开的MemoryStream
从一个文件路径下面的构造方法:
I have the following constructor method which opens a MemoryStream
from a file path:
MemoryStream _ms;
public MyClass(string filePath)
{
byte[] docBytes = File.ReadAllBytes(filePath);
_ms = new MemoryStream();
_ms.Write(docBytes, 0, docBytes.Length);
}
我需要更改此接受流
而不是文件路径。请告诉我最简单/最有效的方式来获得的MemoryStream
从流
对象?
I need to change this to accept a Stream
instead of a file path. Whats the easiest/most efficient way to get a MemoryStream
from the Stream
object?
推荐答案
如果您正在修改你的类接受流,而不是一个文件名,也懒得转换为一个MemoryStream。让底层流处理操作:
If you're modifying your class to accept a Stream instead of a filename, don't bother converting to a MemoryStream. Let the underlying Stream handle the operations:
public class MyClass
{
Stream _s;
public MyClass(Stream s) { _s = s; }
}
但如果你真的需要的内部操作一个MemoryStream,你必须将数据从源数据流的复制到MemoryStream的:
But if you really need a MemoryStream for internal operations, you'll have to copy the data out of the source Stream into the MemoryStream:
public MyClass(Stream stream)
{
_ms = new MemoryStream();
CopyStream(stream, _ms);
}
// Merged From linked CopyStream below and Jon Skeet's ReadFully example
public static void CopyStream(Stream input, Stream output)
{
byte[] buffer = new byte[16*1024];
int read;
while((read = input.Read (buffer, 0, buffer.Length)) > 0)
{
output.Write (buffer, 0, read);
}
}
这篇关于如何从.NET中的Stream一个MemoryStream?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!