簡體   English   中英

將流轉換為字節數組

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM