将流转换为字节数组

本文关键字:字节数 数组 字节 转换 | 更新日期: 2023-09-27 18:25:56

我创建了一个简单的扩展来将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索引会转到流的末尾。

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

将流转换为字节数组

正如您所说,在第一次读取之后,您处于流的末尾。因此,您需要使用重置内存流

stream.Seek(0, SeekOrigin.Begin);

stream.Position = 0;

再读一遍之前。请注意,流上的CanSeek必须为true,这两种方法才能工作。MemoryStream很好,其他一些流会将其设置为false。

将流索引设置为开头。

stream.Seek(0, SeekOrigin.Begin);