首頁 >後端開發 >C++ >如何有效地將輸入流轉換為.NET中的字節數組?

如何有效地將輸入流轉換為.NET中的字節數組?

Barbara Streisand
Barbara Streisand原創
2025-01-31 07:06:13461瀏覽

How to Efficiently Convert an Input Stream to a Byte Array in .NET?

>將輸入流轉換為.NET中的字節數組:比較分析

>

.NET提供了幾種將輸入流轉換為字節數組的方法。 本文比較了共同的方法,突出了它們的優勢和劣勢。

>

最簡單的方法使用BinaryReader.ReadBytes,如下所示:>

<code class="language-csharp">using (BinaryReader br = new BinaryReader(s))
{
    b = br.ReadBytes((int)s.Length);
}</code>
,如果事先已知流的長度(

),這將是有效的。但是,情況並非總是如此。 s.Length> 對於長度未知的流,需要更堅固的解決方案。 以下方法,利用

,有效地處理可變長度流:

> Stream.Read

此方法迭代地將流讀取為緩衝區,直到處理所有數據為止。
<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>
.net 4.0和更高版本的版本使用

>:

提供了更簡潔,更有效的替代方案

Stream.CopyTo這與以前的方法相同,但具有改善的簡潔性。

>
<code class="language-csharp">public static byte[] ReadFully(Stream input)
{
    using (MemoryStream ms = new MemoryStream())
    {
        input.CopyTo(ms);
        return ms.ToArray();
    }
}</code>
最佳方法取決於您的特定需求。 當已知流長度時,

>是合適的,而

(在任何一個實現中)為未知或可變長度的流提供了可靠的解決方案。 該方法是.NET 4.0及以上的最有效,最可讀的選項。

以上是如何有效地將輸入流轉換為.NET中的字節數組?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn