Search code examples
.netvb.netstringmemorystream

How do you get a string from a MemoryStream?


If I am given a MemoryStream that I know has been populated with a String, how do I get a String back out?


Solution

  • This sample shows how to read and write a string to a MemoryStream.


    Imports System.IO
    
    Module Module1
      Sub Main()
        ' We don't need to dispose any of the MemoryStream 
        ' because it is a managed object. However, just for 
        ' good practice, we'll close the MemoryStream.
        Using ms As New MemoryStream
          Dim sw As New StreamWriter(ms)
          sw.WriteLine("Hello World")
          ' The string is currently stored in the 
          ' StreamWriters buffer. Flushing the stream will 
          ' force the string into the MemoryStream.
          sw.Flush()
          ' If we dispose the StreamWriter now, it will close 
          ' the BaseStream (which is our MemoryStream) which 
          ' will prevent us from reading from our MemoryStream
          'sw.Dispose()
    
          ' The StreamReader will read from the current 
          ' position of the MemoryStream which is currently 
          ' set at the end of the string we just wrote to it. 
          ' We need to set the position to 0 in order to read 
          ' from the beginning.
          ms.Position = 0
          Dim sr As New StreamReader(ms)
          Dim myStr = sr.ReadToEnd()
          Console.WriteLine(myStr)
    
          ' We can dispose our StreamWriter and StreamReader 
          ' now, though this isn't necessary (they don't hold 
          ' any resources open on their own).
          sw.Dispose()
          sr.Dispose()
        End Using
    
        Console.WriteLine("Press any key to continue.")
        Console.ReadKey()
      End Sub
    End Module