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
Libérer: 2025-01-31 07:11:08
original
782 Les gens l'ont consulté

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>
Copier après la connexion
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>
Copier après la connexion

Autres précautions

<code class="language-csharp">using (MemoryStream ms = new MemoryStream())
{
    s.CopyTo(ms);
    return ms.ToArray();
}</code>
Copier après la connexion
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 de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal