Próbuję przekonwertować strumień (System.Net.ConnectStream) na tablicę bajtów. Wszelkie przemyślenia/przykłady na temat tego, jak można to zrobić?C# Jak przekonwertować System.Net.ConnectStream na bajt [] (tablica)
Odpowiedz
Stream sourceStream = ... // the ConnectStream
byte[] array;
using (var ms = new MemoryStream())
{
sourceStream.CopyTo(ms);
array = ms.ToArray();
}
W tym przypadku używasz pamięci w 3 razy więcej niż Twój strumień. Nie jest tak dobrze, jeśli twoje strumienie mogą zająć więcej pamięci niż twój komputer. W takim przypadku musisz użyć Stream.Read do odczytywania porcji danych ze strumienia źródłowego i pracy z tymi porcjami. –
Zauważ, że 'Stream.CopyTo' jest dostępne tylko w .NET 4.0 i nowszych. Zobacz odpowiedź Kevina na wersję przed 4.0. –
Dzięki! to działa! @Thomas – Mulaiko
Spróbuj tego ...
private static readonly object _lock = new object();
public static byte[] readFullStream(Stream st)
{
try
{
Monitor.Enter(_lock);
byte[] buffer = new byte[65536];
Int32 bytesRead;
MemoryStream ms = new MemoryStream();
bool finished = false;
while (!finished)
{
bytesRead = st.Read(buffer.Value, 0, buffer.Length);
if (bytesRead > 0)
{
ms.Write(buffer.Value, 0, bytesRead);
}
else
{
finished = true;
}
}
return ms.ToArray();
}
finally
{
Monitor.Exit(_lock);
}
}
Oto wskazówka, jeśli używasz zaokrąglonego bufora liczbowego (np. 64k w twoim przykładzie), możesz zamienić '65536' na' 64 << 10', gdzie po lewej stronie znajduje się twój numer i po prawej stronie '0 = Bajty, 10 = Kilobites, 20 = Megabajty, 30 = gigabajty, ect ...' Więc bufor 2 MB będzie '2 << 20' –
Również, dlaczego blokujesz _lock? jeśli próbujesz uzyskać wyłączny dostęp do strumienia, powinieneś zablokować coś związanego ze strumieniem (lub wywołać [Stream.Synchronized] (http://msdn.microsoft.com/en-us/library/system.io. stream.synchronized.aspx) zanim zostanie przekazany). Nie robisz nic w swoim kodzie, który by się zepsuł, gdybyś przekonwertował dwa różne *** strumienie w tym samym czasie –
W jednym odpowiedź od Freeetje istnieje metoda napisany nazwie 'ReadToEnd'. Pracował jak czar dla mnie ...
How do I get the filesize from the Microsoft.SharePoint.Client.File object?
- 1. Jak przekonwertować bajt [] na InputStream?
- 2. Jak przekonwertować char na bajt?
- 3. przekonwertować cały bajt [] na uint
- 4. C# int na bajt []
- 5. Jak przekonwertować ciąg na bajt w języku C#?
- 6. Jak przekonwertować Java String na bajt []?
- 7. Jak mogę przekonwertować bajt [] na BitmapImage?
- 8. Jak przekonwertować ciąg na bajt w Javie
- 9. Jak przekonwertować bajt na długi w Javie?
- 10. zlib z C++ na C# (Jak konwertować bajt [] na strumień i strumień na bajt [])
- 11. pdfbox przekonwertować pdf na bajt obrazu []
- 12. C# - Konwertuj niebezpieczne bajty * na bajt []
- 13. Tablica bajtów Androida na Bitmapie Jak
- 14. C# - Konwersja uint na bajt []
- 15. Jak przekonwertować bajt [] na ciąg bez kodowania, bez utraty danych
- 16. Jak przekonwertować bajt [Rozmiar] na ciąg w Go?
- 17. Flip obraz zapisany jako bajt [] tablica
- 18. C# przekształcić obiekt [] na bajt [], ale jak zachować bajt jako bajt?
- 19. Java - Byte [] na bajt []
- 20. Konwertuj system.data.linq.binary na bajt []
- 21. Konwertuj java.io.StringWriter na bajt [] array
- 22. Konwertuj bajt [] na sbyte []
- 23. Tablica znaków na łańcuch szesnastkowy C++
- 24. (Javascript) Konwertuj bajt [] na obraz
- 25. Nie można niejawnie przekonwertować ciągu znaków na bajt []
- 26. Konwertuj Go [] bajt na C * char
- 27. C# Konwertuj Char na Bajt (reprezentacja heksadecymalna)
- 28. iTextSharp - Jak konwertować dokument na bajt []
- 29. Konwertuj bajt [] na Typ bufora
- 30. bajt [] tablica do struct z tablicą o zmiennej długości
Wystarczy przeczytać ją do bufora ('byte []'). Spójrz na ['Stream.Read'] (http://msdn.microsoft.com/en-us/library/system.io.stream.read.aspx) na MSDN. – Oded
@Wykonywane, tak, ale nie jest to bardzo łatwy sposób na skopiowanie całej zawartości strumienia (chyba że znasz jego długość, co nie zawsze ma miejsce w przypadku ConnectStream). –