Jeśli otrzymam wiadomość MemoryStream
, o której wiem, że została wypełniona String
, jak mogę się String
wycofać?
.net
vb.net
string
memorystream
Brian
źródło
źródło
Odpowiedzi:
Ten przykład pokazuje, jak czytać i zapisywać ciąg do MemoryStream.
źródło
Możesz także użyć
Nie sądzę, że jest to mniej wydajne, ale nie mogłem tego przysiąc. Pozwala również wybrać inne kodowanie, a używając StreamReadera musisz podać to jako parametr.
źródło
OutOfMemoryException
s. ZastosowanieStreamReader
zamiast tego rozwiązało problem.00
na początku łańcucha.00 3C 3F
->.<?
w Hex Editor ale w VS lub Notepad ++:<?
. Tak więc nie widzisz różnicy, nawet jeśli porównasz ciągi wzrokowo, tylko narzędzie do porównywania lub edytor szesnastkowy pokaże różnicę. Jeśli nadal go używasz, pomyśl o String.TrimStart. Zobacz: docs.microsoft.com/en-us/dotnet/api/…Użycie StreamReadera do konwersji MemoryStream na ciąg.
źródło
użyj StreamReader , a następnie możesz użyć metody ReadToEnd , która zwraca ciąg znaków.
źródło
Basestream
należy ustawić pozycję na 0. Podobnie jakmemoryStream.Position = 0;
.źródło
Poprzednie rozwiązania nie działały w przypadkach, w których występuje kodowanie. Oto - rodzaj „prawdziwego życia” - przykład, jak zrobić to poprawnie ...
źródło
W takim przypadku, jeśli naprawdę chcesz użyć
ReadToEnd
metody wMemoryStream
prosty sposób, możesz użyć tej metody rozszerzenia, aby to osiągnąć:Możesz użyć tej metody w następujący sposób:
źródło
Ten przykład pokazuje, jak odczytać ciąg z MemoryStream, w którym użyłem serializacji (przy użyciu DataContractJsonSerializer), przekazać ciąg z jednego serwera do klienta, a następnie, jak odzyskać MemoryStream z ciągu przekazanego jako parametr, a następnie , deserializować MemoryStream.
Użyłem części różnych postów, aby wykonać tę próbkę.
Mam nadzieję, że to pomaga.
źródło
Nieznacznie zmodyfikowana wersja odpowiedzi Briana umożliwia opcjonalne zarządzanie początkowym odczytem. Wydaje się, że jest to najłatwiejsza metoda. prawdopodobnie nie jest najbardziej wydajny, ale łatwy do zrozumienia i użycia.
źródło
Dlaczego nie stworzyć ładnej metody rozszerzenia na MemoryStream?
Oczywiście należy zachować ostrożność, stosując te metody w połączeniu ze standardowymi. :) ... musisz użyć tego poręcznego streamLock, jeśli to zrobisz, do współbieżności.
źródło
Muszę zintegrować się z klasą, która potrzebuje strumienia, aby napisać na nim:
Tworzę prostą klasę, która może pomóc w zmniejszeniu liczby wierszy kodu dla wielokrotności:
następnie możesz zastąpić próbkę jednym wierszem kodu
źródło