如果我给了一个MemoryStream,我知道已经填充了一个字符串,我如何得到一个字符串回来?


当前回答

byte[] array = Encoding.ASCII.GetBytes("MyTest1 - MyTest2");
MemoryStream streamItem = new MemoryStream(array);

// convert to string
StreamReader reader = new StreamReader(streamItem);
string text = reader.ReadToEnd();

其他回答

以前的解决方案在涉及编码的情况下不起作用。这是一个“现实生活”的例子,如何正确地做到这一点…

using(var stream = new System.IO.MemoryStream())
{
  var serializer = new DataContractJsonSerializer(typeof(IEnumerable<ExportData>),  new[]{typeof(ExportData)}, Int32.MaxValue, true, null, false);               
  serializer.WriteObject(stream, model);  


  var jsonString = Encoding.Default.GetString((stream.ToArray()));
}

你也可以使用

Encoding.ASCII.GetString(ms.ToArray());

我不认为这是低效率,但我不能保证。它还允许您选择不同的编码,而使用StreamReader时,您必须将其指定为参数。

只使用方法Convert。ToBase64String

Convert.ToBase64String(inputStream.ToArray());

使用StreamReader将MemoryStream转换为字符串。

<Extension()> _
Public Function ReadAll(ByVal memStream As MemoryStream) As String
    ' Reset the stream otherwise you will just get an empty string.
    ' Remember the position so we can restore it later.
    Dim pos = memStream.Position
    memStream.Position = 0

    Dim reader As New StreamReader(memStream)
    Dim str = reader.ReadToEnd()

    ' Reset the position so that subsequent writes are correct.
    memStream.Position = pos

    Return str
End Function
byte[] array = Encoding.ASCII.GetBytes("MyTest1 - MyTest2");
MemoryStream streamItem = new MemoryStream(array);

// convert to string
StreamReader reader = new StreamReader(streamItem);
string text = reader.ReadToEnd();