.NET流到字節數組轉換的最佳實踐
將輸入流轉換為字節數組是編程中常見的任務。有多種方法可以實現此目的,最佳方法取決於具體的用例和可用資源。
使用BinaryReader
在.NET 3.5中,一種常用的方法是使用BinaryReader類,如下面的代碼片段所示:
<code class="language-csharp">Stream s; byte[] b; using (BinaryReader br = new BinaryReader(s)) { b = br.ReadBytes((int)s.Length); }</code>
此方法分配一個指定長度的數組,並將流的全部內容讀取到該數組中。但是,它依賴於對流長度的準確了解,而這並不總是可用的。
分塊讀取和寫入
如果流的長度未知或不可靠,則使用循環分塊讀取流可能更高效:
<code class="language-csharp">public static byte[] ReadFully(Stream input) { byte[] buffer = new byte[16 * 1024]; using (MemoryStream ms = new MemoryStream()) { int read; while ((read = input.Read(buffer, 0, buffer.Length)) > 0) { ms.Write(buffer, 0, read); } return ms.ToArray(); } }</code>
此方法重複將數據讀取到緩衝區中,直到到達流的末尾。它在返回字節數組之前將數據累積到MemoryStream中。
或者,在.NET 4及更高版本中,可以使用Stream.CopyTo來實現與上述循環相同的結果:
<code class="language-csharp">using (MemoryStream ms = new MemoryStream()) { s.CopyTo(ms); return ms.ToArray(); }</code>
其他注意事項
這些方法的選擇取決於幾個因素:
值得注意的是,Stream.Read不能保證它能夠一次性讀取所有請求的數據。因此,在確保讀取所有數據時,務必使用循環或Stream.CopyTo等替代方法。
以上是如何有效地將流轉換為.NET中的字節數組?的詳細內容。更多資訊請關注PHP中文網其他相關文章!