Rumah >pembangunan bahagian belakang >C++ >Bagaimana dengan cekap menukar aliran input ke array byte dalam .net?

Bagaimana dengan cekap menukar aliran input ke array byte dalam .net?

Barbara Streisand
Barbara Streisandasal
2025-01-31 07:06:13441semak imbas

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

Menukar aliran input ke tatasusunan byte dalam .net: analisis perbandingan

.NET menawarkan beberapa cara untuk mengubah aliran input ke dalam array byte. Artikel ini membandingkan kaedah biasa, menonjolkan kekuatan dan kelemahan mereka.

Pendekatan paling mudah menggunakan

, seperti yang ditunjukkan di bawah: BinaryReader.ReadBytes

<code class="language-csharp">using (BinaryReader br = new BinaryReader(s))
{
    b = br.ReadBytes((int)s.Length);
}</code>
Ini adalah cekap jika panjang aliran (

) diketahui terlebih dahulu. Walau bagaimanapun, ini tidak selalu berlaku. s.Length

Untuk aliran dengan panjang yang tidak diketahui, penyelesaian yang lebih mantap diperlukan. Kaedah berikut, menggunakan

, mengendalikan aliran panjang berubah-ubah dengan berkesan: 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>
Kaedah ini secara beransur -ansur membaca aliran ke dalam penampan sehingga semua data diproses.

.net 4.0 dan kemudian versi menawarkan alternatif yang lebih ringkas dan cekap menggunakan

: Stream.CopyTo

<code class="language-csharp">public static byte[] ReadFully(Stream input)
{
    using (MemoryStream ms = new MemoryStream())
    {
        input.CopyTo(ms);
        return ms.ToArray();
    }
}</code>
Ini mencapai hasil yang sama dengan kaedah sebelumnya tetapi dengan kesimpulan yang lebih baik.

Kaedah optimum bergantung kepada keperluan khusus anda.

sesuai apabila panjang aliran diketahui, manakala BinaryReader.ReadBytes (sama ada pelaksanaan) menyediakan penyelesaian yang boleh dipercayai untuk aliran panjang yang tidak diketahui atau berubah. Kaedah Stream.ReadFully adalah pilihan yang paling berkesan dan boleh dibaca untuk .NET 4.0 dan ke atas. Stream.CopyTo

Atas ialah kandungan terperinci Bagaimana dengan cekap menukar aliran input ke array byte dalam .net?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn