将流转换为字节数组
本文关键字:字节数 数组 字节 转换 | 更新日期: 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);