[英]Convert Stream to Byte Array
我創建了一個簡單的擴展以將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);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.