J'obtiens l'objet streamreader résultant.
Je veux convertir le résultat en octet [].
Comment puis-je convertir streamreader en octet []?
Merci
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.
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();
}
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);
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.