Maison >développement back-end >C++ >Comment convertir efficacement un flux d'entrée en un tableau d'octets dans .NET?

Comment convertir efficacement un flux d'entrée en un tableau d'octets dans .NET?

Barbara Streisand
Barbara Streisandoriginal
2025-01-31 07:06:13393parcourir

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

Convertir des flux d'entrée en tableaux d'octets dans .NET: une analyse comparative

.NET offre plusieurs façons de transformer un flux d'entrée en un tableau d'octets. Cet article compare les méthodes courantes, mettant en évidence leurs forces et leurs faiblesses.

L'approche la plus simple utilise BinaryReader.ReadBytes, comme démontré ci-dessous:

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

Ceci est efficace si la longueur du flux (s.Length) est connue au préalable. Cependant, ce n'est pas toujours le cas.

Pour les flux avec des longueurs inconnues, une solution plus robuste est nécessaire. La méthode suivante, en utilisant Stream.Read, gère efficacement les flux de longueur variable:

<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>

Cette méthode lit de manière itérative le flux dans un tampon jusqu'à ce que toutes les données soient traitées.

.NET 4.0 et ultérieurs Les versions offrent une alternative plus concise et efficace en utilisant Stream.CopyTo:

<code class="language-csharp">public static byte[] ReadFully(Stream input)
{
    using (MemoryStream ms = new MemoryStream())
    {
        input.CopyTo(ms);
        return ms.ToArray();
    }
}</code>

Cela obtient le même résultat que la méthode précédente mais avec une amélioration de la concision.

La méthode optimale dépend de vos besoins spécifiques. BinaryReader.ReadBytes convient lorsque la longueur du flux est connue, tandis que Stream.ReadFully (dans l'une ou l'autre implémentation) fournit une solution fiable pour les flux de longueur inconnue ou variable. La méthode Stream.CopyTo est l'option la plus efficace et la plus lisible pour .NET 4.0 et plus.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn