415 votes

Comment convertir un flux de données en un byte [] en c# ?

Y a-t-il une façon simple ou une méthode pour convertir un dans un en c# ?

954voto

James Dingle Points 3341

La solution plus court, que je sais :

179voto

pho3nix Points 3288

Appelez la fonction suivante comme

Fonction :

57voto

Daniel Earwicker Points 63298

Pratique, la fonction d'assistance à avoir est la suivante:

public static void CopyStream(Stream input, Stream output)
{
    byte[] b = new byte[32768];
    int r;
    while ((r = input.Read(b, 0, b.Length)) > 0)
        output.Write(b, 0, r);
}

Ensuite l'utiliser pour copier à un MemoryStream et appelez - GetBuffer sur:

Stream file = new FileStream("c:\\foo.txt", FileMode.Open);

MemoryStream mem = new MemoryStream();
CopyStream(file, mem);

// getting the internal buffer (no additional copying)
byte[] buffer = mem.GetBuffer();
long length = mem.Length; // the actual length of the data 
                          // (the array may be longer)

// if you need the array to be exactly as long as the data
byte[] truncated = mem.ToArray(); // makes another copy

Edit: à l'origine, j'ai suggéré à l'aide de Jason réponse à un Stream qui prend en charge l' Length de la propriété. Mais il avait un défaut, car elle suppose que l' Stream serait de retour l'ensemble de son contenu dans un seul Read, ce qui n'est pas nécessairement vrai (et non pour un Socket, par exemple). Je ne sais pas si il y a un exemple d'un Stream de la mise en œuvre de la BCL qui prend en charge Length mais peut renvoyer les données en plus petits morceaux que vous demandez, mais comme n'importe qui peut hériter Stream cela pourrait facilement être le cas.

Il est probablement plus simple pour la plupart des cas à utiliser au-dessus de la solution générale, mais en supposant que vous ne voulez le lire directement dans un tableau, c'est - bigEnough:

byte[] b = new byte[bigEnough];
int r, offset;
while ((r = input.Read(b, offset, b.Length - offset)) > 0)
    offset += r;

C'est, de l'appeler à plusieurs reprises Read et déplacer la position vous permettra de stocker les données.

29voto

user734862 Points 181
    byte[] buf;  // byte array
    Stream stream=Page.Request.InputStream;  //initialise new stream
    buf = new byte[stream.Length];  //declare arraysize
    stream.Read(buf, 0, buf.Length); // read from stream to byte array

11voto

Vinicius Points 172

OK, peut-être que je manque quelque chose ici, mais c’est comme je le fais :

Qui concerne

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