猿问

从流创建字节数组

从流创建字节数组

从输入流创建字节数组的首选方法是什么?

下面是我使用.NET 3.5的当前解决方案。

Stream s;byte[] b;using (BinaryReader br = new BinaryReader(s)){
    b = br.ReadBytes((int)s.Length);}

读和写小溪的小块还是个更好的主意吗?


噜噜哒
浏览 555回答 3
3回答

紫衣仙女

虽然Jon的答案是正确的,但他正在重写已经存在于CopyTo..因此,对于.NET 4,使用Sandip的解决方案,但对于以前版本的.net,则使用Jon的答案。中使用“作为例外,将改进Sandip的代码。CopyTo在许多情况下,很有可能并将离开MemoryStream没有处理。public static byte[] ReadFully(Stream input){     using (MemoryStream ms = new MemoryStream())     {         input.CopyTo(ms);         return ms.ToArray();     }}

斯蒂芬大帝

我只想指出,万一你已经有了一个内存流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);     }}
随时随地看视频慕课网APP
我要回答