42 votes

Convertir StreamReader en octet[]

J'obtiens le résultat StreamReader objet.

Je veux convertir le résultat en byte[] .

Comment puis-je convertir StreamReader en byte[] ?

Merci

50voto

Jeff Mercado Points 42075

Il suffit de jeter tout ce que vous lisez dans un MemoryStream et d'obtenir le tableau d'octets à la fin. Comme indiqué, vous devez lire à partir du flux sous-jacent pour obtenir les octets bruts.

 var bytes = default(byte[]);
using (var memstream = new MemoryStream())
{
    var buffer = new byte[512];
    var bytesRead = default(int);
    while ((bytesRead = reader.BaseStream.Read(buffer, 0, buffer.Length)) > 0)
        memstream.Write(buffer, 0, bytesRead);
    bytes = memstream.ToArray();
}

Ou si vous ne souhaitez pas gérer les buffers :

 var bytes = default(byte[]);
using (var memstream = new MemoryStream())
{
    reader.BaseStream.CopyTo(memstream);
    bytes = memstream.ToArray();
}

38voto

Matti Virkkunen Points 31633

Un StreamReader est pour le texte, pas pour les octets simples. N'utilisez pas de StreamReader et lisez plutôt directement à partir du flux sous-jacent.

2voto

Mikl X Points 383

Vous pouvez également utiliser CopyTo :

 var ms = new MemoryStream();
yourStreamReader.BaseStream.CopyTo(ms); // blocking call till the end of the stream
ms.GetBuffer().CopyTo(yourArray, ms.Length);

ou

 var ms = new MemoryStream();
var ct = yourStreamReader.BaseStream.CopyToAsync(ms);
await ct;
ms.GetBuffer().CopyTo(yourArray, ms.Length);

-3voto

Daniel Hilgarth Points 90722

Vous pouvez utiliser ce code : Vous ne devriez pas utiliser ce code :

 byte[] bytes = streamReader.CurrentEncoding.GetBytes(streamReader.ReadToEnd());

Veuillez consulter le commentaire de cette réponse pour savoir pourquoi. Je vais laisser la réponse, afin que les gens connaissent les problèmes avec cette approche, car je ne l'ai pas fait jusqu'à présent.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X