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!