Jak przekonwertować struct System.Byte byte[]na System.IO.Streamobiekt w C # ?
Jak przekonwertować struct System.Byte byte[]na System.IO.Streamobiekt w C # ?
Odpowiedzi:
Najłatwiejszym sposobem przekonwertowania tablicy bajtów na strumień jest użycie MemoryStreamklasy:
Stream stream = new MemoryStream(byteArray);
stream.ToArray()jeśli chcesz odzyskać tablicę bajtów.
Szukasz MemoryStream.Writemetody .
Na przykład poniższy kod zapisze zawartość byte[]tablicy w strumieniu pamięci:
byte[] myByteArray = new byte[10];
MemoryStream stream = new MemoryStream();
stream.Write(myByteArray, 0, myByteArray.Length);
Alternatywnie możesz utworzyć nowy obiekt , którego rozmiar nie może się zmieniać, MemoryStreamna podstawie tablicy bajtów:
byte[] myByteArray = new byte[10];
MemoryStream stream = new MemoryStream(myByteArray);
MemoryStream.Writezajmuje dużo więcej pamięcinew MemoryStream(myByteArray)
MemoryStreamDomyślnie w buforze jest przydzielone dodatkowe miejsce (tak jak np. Z listą). Można to łatwo rozwiązać za pomocą przeciążenia, które pozwala ustawić pojemność, ale jest to naprawdę przydatne, jeśli nie spodziewasz się zapisania żadnych danych w strumieniu (lub jeśli wiesz, ile dodatkowych bajtów prawdopodobnie będziesz potrzebować ). Podejrzewam jednak, że jitbit może odnosić się do faktu, że gdy używasz byte[]konstruktora, tablica nie jest kopiowana - MemoryStreamodnosi się do tablicy w argumencie. Może to być zarówno dobre, jak i złe, a szkoda, że nie jest to udokumentowane w MSDN :)
Zajrzyj do MemoryStreamklasy.