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

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

DDD
DDDasal
2025-01-31 07:11:08743semak imbas

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

.net mengalir ke amalan terbaik penukaran array byte

Input transformasi ke array byte adalah tugas yang sama dalam pengaturcaraan. Terdapat banyak cara untuk mencapai tujuan ini.

Gunakan BinaryReader

Dalam .NET 3.5, kaedah yang biasa digunakan adalah menggunakan kelas BinaryReader, seperti yang ditunjukkan dalam serpihan kod di bawah:

Kaedah ini memperuntukkan pelbagai panjang yang ditentukan dan membaca semua kandungan aliran ke dalam array. Walau bagaimanapun, ia bergantung kepada pemahaman yang tepat tentang panjang aliran, dan ini tidak selalu tersedia.

<code class="language-csharp">Stream s;
byte[] b;

using (BinaryReader br = new BinaryReader(s))
{
    b = br.ReadBytes((int)s.Length);
}</code>
baca dan tulis dalam blok

Jika panjang aliran tidak boleh dipercayai atau tidak boleh dipercayai, penggunaan segmen bulat untuk membaca aliran mungkin lebih efisien:

Kaedah ini berulang kali membaca data ke dalam penampan sehingga akhir arus. Ia mengumpul data ke dalam memoristream sebelum mengembalikan array byte.

atau, dalam versi .net 4 dan lebih tinggi, anda boleh menggunakan stream.copyto untuk mencapai hasil yang sama seperti kitaran di atas:
<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>

Langkah berjaga -jaga lain

<code class="language-csharp">using (MemoryStream ms = new MemoryStream())
{
    s.CopyTo(ms);
    return ms.ToArray();
}</code>
pilihan kaedah ini bergantung kepada beberapa faktor:

Kebolehpercayaan panjang aliran:

Jika diketahui dan boleh dipercayai, penggunaan pembaca binari dapat meningkatkan kecekapan.

Stream:
    Jika alirannya besar, sebaiknya gunakan kaedah blok untuk mengelakkan ingatan yang berlebihan.
  • Prestasi: Dalam beberapa kes, disebabkan oleh pengurangan overhead memori, prestasi kaedah blok mungkin sedikit lebih baik daripada penggunaan BinaryReader.
  • Perlu diperhatikan bahawa aliran.READ tidak dapat menjamin bahawa ia boleh membaca semua data permintaan pada satu masa. Oleh itu, apabila memastikan semua data, pastikan anda menggunakan kitaran atau aliran alternatif.

Atas ialah kandungan terperinci Bagaimana dengan cekap menukar aliran 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