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

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

DDD
DDDoriginal
2025-01-31 07:11:08783parcourir

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

.net coulant vers la meilleure pratique de la conversion du tableau des octets

L'entrée transformatrice en tableau d'octets est une tâche courante dans la programmation. Il existe de nombreuses façons d'atteindre cet objectif.

Utilisez BinaryReader

Dans .NET 3.5, une méthode couramment utilisée consistait à utiliser la classe BinaryReader, comme le montre le fragment de code ci-dessous:

Cette méthode alloue un tableau de longueur spécifiée et lit tous les contenus du flux dans le tableau. Cependant, cela dépend de la compréhension précise de la longueur du débit, et cela n'est pas toujours disponible.

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

using (BinaryReader br = new BinaryReader(s))
{
    b = br.ReadBytes((int)s.Length);
}</code>
lire et écrire dans les blocs

Si la longueur de l'écoulement n'est pas fiable ou peu fiable, l'utilisation de segments circulaires pour lire l'écoulement peut être plus efficace:

Cette méthode lit à plusieurs reprises les données dans le tampon jusqu'à la fin du courant. Il accumule les données dans MemoryStream avant de retourner le tableau d'octets.

ou, dans les versions .NET 4 et supérieures, vous pouvez utiliser Stream.copyto pour obtenir les mêmes résultats que le cycle ci-dessus:
<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>

Autres précautions

<code class="language-csharp">using (MemoryStream ms = new MemoryStream())
{
    s.CopyTo(ms);
    return ms.ToArray();
}</code>
Le choix de ces méthodes dépend de plusieurs facteurs:

La fiabilité de la longueur du débit:

Si elle est connue et fiable, l'utilisation de BinaryReader peut améliorer l'efficacité.

Stream:
    Si le débit est grand, il est préférable d'utiliser une méthode de bloc pour éviter une mémoire excessive.
  • Performance: Dans certains cas, en raison de la réduction de la surcharge de mémoire, les performances de la méthode de bloc peuvent être légèrement meilleures que l'utilisation de BinaryReader.
  • Il convient de noter que Stream.read ne peut garantir qu'il peut lire toutes les données de demande en même temps. Par conséquent, lorsque vous assurez toutes les données, assurez-vous d'utiliser un cycle ou un flux. Copyto Méthode alternative.

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