Gibt es einen einfachen Weg oder eine Methode zur Konvertierung einer Stream
in eine byte[]
C#で?
Diese Frage hat bereits Antworten:
- Erstellen eines Byte-Arrays aus einem Stream (18 Antworten )
Antworten
Zu viele Anzeigen?
Sharon AS
Punkte
344
Vinicius
Punkte
1467
Savas Adar
Punkte
3695
jason
Punkte
227577
Stream s;
int len = (int)s.Length;
byte[] b = new byte[len];
int pos = 0;
while((r = s.Read(b, pos, len - pos)) > 0) {
pos += r;
}
Eine etwas kompliziertere Lösung ist erforderlich, wenn s.Length
übersteigt Int32.MaxValue
. Wenn Sie jedoch einen so großen Datenstrom in den Speicher einlesen müssen, sollten Sie vielleicht über einen anderen Ansatz für Ihr Problem nachdenken.
Bearbeiten: Wenn Ihr Stream die Option Length
Eigenschaft, ändern mit Earwicker's Abhilfe .
public static class StreamExtensions {
// Credit to Earwicker
public static void CopyStream(this 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);
}
}
}
[...]
Stream s;
MemoryStream ms = new MemoryStream();
s.CopyStream(ms);
byte[] b = ms.GetBuffer();
SwDevMan81
Punkte
47339
Sie könnten auch versuchen, nur Teile auf einmal einzulesen und das zurückgegebene Byte-Array zu erweitern:
public byte[] StreamToByteArray(string fileName)
{
byte[] total_stream = new byte[0];
using (Stream input = File.Open(fileName, FileMode.Open, FileAccess.Read))
{
byte[] stream_array = new byte[0];
// Setup whatever read size you want (small here for testing)
byte[] buffer = new byte[32];// * 1024];
int read = 0;
while ((read = input.Read(buffer, 0, buffer.Length)) > 0)
{
stream_array = new byte[total_stream.Length + read];
total_stream.CopyTo(stream_array, 0);
Array.Copy(buffer, 0, stream_array, total_stream.Length, read);
total_stream = stream_array;
}
}
return total_stream;
}