Se eu receber um MemoryStream
que eu sei que foi preenchido com um String
, como faço String
para voltar atrás?
.net
vb.net
string
memorystream
Brian
fonte
fonte
Respostas:
Este exemplo mostra como ler e gravar uma seqüência de caracteres em um MemoryStream.
fonte
Você também pode usar
Não acho que isso seja menos eficiente, mas não podia jurar. Ele também permite que você escolha uma codificação diferente, enquanto que usando um StreamReader você precisará especificar isso como parâmetro.
fonte
OutOfMemoryException
s. O uso de umStreamReader
resolvido resolveu o problema.00
no início da string.00 3C 3F
->.<?
no Editor Hex mas em VS ou Notepad ++:<?
. Portanto, você não pode ver a diferença, mesmo se comparar as strings a olho, apenas uma ferramenta de comparação ou um editor Hex mostrará a diferença. Se você ainda o usar, pense em String.TrimStart. Veja: docs.microsoft.com/en-us/dotnet/api/…Usando um StreamReader para converter o MemoryStream em uma String.
fonte
use um StreamReader , então você pode usar o método ReadToEnd que retorna uma seqüência de caracteres.
fonte
Basestream
should definiu sua posição como 0. LikememoryStream.Position = 0;
.fonte
As soluções anteriores não funcionariam nos casos em que a codificação estivesse envolvida. Aqui está - como uma "vida real" - exemplo de como fazer isso corretamente ...
fonte
Nesse caso, se você realmente quiser usar o
ReadToEnd
método deMemoryStream
uma maneira fácil, poderá usar este método de extensão para conseguir isso:E você pode usar este método desta maneira:
fonte
Este exemplo mostra como ler uma string de um MemoryStream, no qual eu usei uma serialização (usando DataContractJsonSerializer), passar a string de algum servidor para cliente e, em seguida, como recuperar o MemoryStream da string passada como parâmetro e, em seguida, , desserialize o MemoryStream.
Eu usei partes de postagens diferentes para executar este exemplo.
Espero que isso ajude.
fonte
Uma versão ligeiramente modificada da resposta de Brian permite o gerenciamento opcional do início da leitura. Esse parece ser o método mais fácil. provavelmente não é o mais eficiente, mas fácil de entender e usar.
fonte
Por que não fazer um bom método de extensão no tipo MemoryStream?
Obviamente, tenha cuidado ao usar esses métodos em conjunto com os métodos padrão. :) ... você precisará usar esse streamLock acessível, se o fizer, por simultaneidade.
fonte
Preciso me integrar a uma classe que precise de um fluxo para escrever nele:
Eu crio uma classe simples que pode ajudar a reduzir linhas de código para uso múltiplo:
então você pode substituir a amostra por uma única linha de código
fonte