web-dev-qa-db-fra.com

Convertir StreamReader en octet []

J'obtiens l'objet streamreader résultant.

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

Comment puis-je convertir streamreader en octet []?

Merci

36
usr021986

Un StreamReader est pour le texte, pas pour les octets simples. N'utilisez pas de StreamReader, et à la place lire directement à partir du flux sous-jacent.

34
Matti Virkkunen

Jetez simplement tout ce que vous lisez dans un MemoryStream et obtenez 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 tampons:

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

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);
2
Mikl X

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

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

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

0
Daniel Hilgarth