从输入流创建字节数组的首选方法是什么?
这是我目前使用.NET 3.5的解决方案。
Stream s;
byte[] b;
using (BinaryReader br = new BinaryReader(s))
{
b = br.ReadBytes((int)s.Length);
}
读写流的块还是个更好的主意吗?
发布于 2011-07-06 00:45:40
虽然Jon的答案是正确的,但他正在重写CopyTo
中已经存在的代码。因此,对于.Net 4,使用桑迪普解决方案,但对于以前的.Net版本,使用Jon的答案。桑迪普的代码将通过使用"using“来改进,因为在许多情况下,CopyTo
中的异常很可能发生,并且会使MemoryStream
不会被处理。
public static byte[] ReadFully(Stream input)
{
using (MemoryStream ms = new MemoryStream())
{
input.CopyTo(ms);
return ms.ToArray();
}
}
发布于 2010-04-13 22:54:01
我只想指出,如果你有一个MemoryStream,你已经有了memorystream.ToArray()
。
此外,如果您正在处理未知或不同子类型的流,并且可以接收MemoryStream
,则可以在这些情况下使用上述方法,并仍然对其他情况使用可接受的答案,如下所示:
public static byte[] StreamToByteArray(Stream stream)
{
if (stream is MemoryStream)
{
return ((MemoryStream)stream).ToArray();
}
else
{
// Jon Skeet's accepted answer
return ReadFully(stream);
}
}
发布于 2011-02-12 21:33:29
MemoryStream ms = new MemoryStream();
file.PostedFile.InputStream.CopyTo(ms);
var byts = ms.ToArray();
ms.Dispose();
https://stackoverflow.com/questions/221925
复制相似问题