将流转换为字节数组

时间:2014-10-08 21:42:47

标签: c#

我创建了一个简单的扩展来将Stream转换为Byte数组:

public static Byte[] ToByte(this Stream value) 
{
  if (value == null)
    return null;

  if (value is MemoryStream)
  {
    return ((MemoryStream)value).ToArray();
  }
  else 
  {
     using (MemoryStream stream = new MemoryStream()) 
     {
          value.CopyTo(stream);
          return stream.ToArray();
      }
  }

}

我第一次使用它时效果很好......

如果我在同一个流上第二次使用它,则生成的Byte []是Byte [0]。

我调试了,我认为这是因为在第一次转换后,Stream索引会转到流的末尾。

解决此问题的正确方法是什么?

2 个答案:

答案 0 :(得分:8)

正如你所说,你在第一次阅读后就在流的最后。因此,您需要使用以下命令重置内存流:

stream.Seek(0, SeekOrigin.Begin);

stream.Position = 0;

再次阅读之前。请注意,对于任一方法,流上的CanSeek必须为true。 MemoryStream很好,其他一些流将此设置为false。

答案 1 :(得分:1)

将流索引设置为开头。

stream.Seek(0, SeekOrigin.Begin);