Si on me donne un MemoryStream
que je sais avoir été rempli avec un String
, comment puis-je obtenir un String
retour?
.net
vb.net
string
memorystream
Brian
la source
la source
Réponses:
Cet exemple montre comment lire et écrire une chaîne dans un MemoryStream.
la source
Vous pouvez aussi utiliser
Je ne pense pas que ce soit moins efficace, mais je ne pouvais pas le jurer. Il vous permet également de choisir un encodage différent, alors qu'en utilisant un StreamReader, vous devrez le spécifier en tant que paramètre.
la source
OutOfMemoryException
s. Utiliser à laStreamReader
place a résolu le problème.00
au début de la chaîne.00 3C 3F
->.<?
dans Hex Editor mais dans VS ou Notepad ++:<?
. Donc, vous ne pouvez pas voir la différence même si vous comparez les chaînes à l'œil nu, seul un outil de comparaison ou un éditeur hexadécimal montrera la différence. Si vous l'utilisez toujours, pensez à String.TrimStart. Voir: docs.microsoft.com/en-us/dotnet/api/…Utilisation d'un StreamReader pour convertir le MemoryStream en une chaîne.
la source
utilisez un StreamReader , vous pouvez alors utiliser la méthode ReadToEnd qui renvoie une chaîne.
la source
Basestream
devrait avoir mis sa position à 0. CommememoryStream.Position = 0;
.la source
Les solutions précédentes ne fonctionneraient pas dans les cas où l'encodage est impliqué. Voici - une sorte de "vraie vie" - par exemple comment faire cela correctement ...
la source
Dans ce cas, si vous voulez vraiment utiliser la
ReadToEnd
méthode deMemoryStream
manière simple, vous pouvez utiliser cette méthode d'extension pour y parvenir:Et vous pouvez utiliser cette méthode de cette manière:
la source
Cet exemple montre comment lire une chaîne à partir d'un MemoryStream, dans lequel j'ai utilisé une sérialisation (à l'aide de DataContractJsonSerializer), transmettre la chaîne d'un serveur à un client, puis comment récupérer le MemoryStream à partir de la chaîne passée en paramètre, puis , désérialisez le MemoryStream.
J'ai utilisé des parties de différents articles pour effectuer cet exemple.
J'espère que cela vous aidera.
la source
Une version légèrement modifiée de la réponse de Brian permet une gestion facultative du démarrage de la lecture. Cela semble être la méthode la plus simple. probablement pas le plus efficace, mais facile à comprendre et à utiliser.
la source
Pourquoi ne pas faire une belle méthode d'extension sur le type MemoryStream?
Bien sûr, soyez prudent lorsque vous utilisez ces méthodes en conjonction avec les méthodes standard. :) ... vous devrez utiliser ce streamLock pratique si vous le faites, pour la concurrence.
la source
J'ai besoin de m'intégrer à une classe qui a besoin d'un Stream pour écrire dessus:
Je crée une classe simple qui peut aider à réduire les lignes de code pour une utilisation multiple:
alors vous pouvez remplacer l'exemple par une seule ligne de code
la source