Maison >développement back-end >C++ >Comment convertir efficacement un flux d'entrée en un tableau d'octets en C #?
C # Stream d'entrée vers le tableau des octets: un guide pratique
La conversion d'un flux d'entrée en un tableau d'octets est une tâche courante lors de la gestion des données binaires en C #. La meilleure méthode dépend si vous connaissez la taille du flux.
Taille connue du flux:
Si la longueur du flux est disponible, BinaryReader.ReadBytes
offre une solution simple:
<code class="language-csharp">using (BinaryReader br = new BinaryReader(s)) { byte[] b = br.ReadBytes((int)s.Length); }</code>
Cela lit directement l'ensemble du flux dans un tableau d'octets.
Taille du flux inconnu:
Pour les flux avec des longueurs inconnues, une approche itérative plus robuste est nécessaire:
<code class="language-csharp">using (MemoryStream ms = new MemoryStream()) { byte[] buffer = new byte[16 * 1024]; // Adjust buffer size as needed int read; while ((read = input.Read(buffer, 0, buffer.Length)) > 0) { ms.Write(buffer, 0, read); } byte[] b = ms.ToArray(); }</code>
Cette méthode lit le flux en morceaux, accumulant les données dans un MemoryStream
avant de la convertir en un tableau d'octets.
.net 4 et supérieur: stream.copyto
.NET 4 et les versions ultérieures offrent une solution plus efficace et concise en utilisant Stream.CopyTo
:
<code class="language-csharp">using (MemoryStream ms = new MemoryStream()) { input.CopyTo(ms); byte[] b = ms.ToArray(); }</code>
Cela gère élégamment les flux de toute taille.
Gestion des performances et des ressources:
N'oubliez pas que la lecture en morceaux peut avoir un impact sur les performances. Expérimentez avec différentes tailles de tampons pour optimiser vos besoins spécifiques. Assurez-vous toujours une fermeture de flux appropriée pour éviter les fuites de ressources.
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!