Skip Navigation

Get a String from a MemoryStream

The MSDN article for MemoryStream has this example of outputting a string to the console.

private static void Main(string[] args)
    int count;
    byte[] byteArray;
    char[] charArray;
    UnicodeEncoding uniEncoding = new UnicodeEncoding();
    // Create the data to write to the stream.
    byte[] firstString = uniEncoding.GetBytes("Invalid file path characters are: ");
    byte[] secondString = uniEncoding.GetBytes(Path.GetInvalidPathChars());
    using(MemoryStream memStream = new MemoryStream(100))
        // Write the first string to the stream.
        memStream.Write(firstString, 0 , firstString.Length);
        // Write the second string to the stream, byte by byte.
        count = 0;
        while(count < secondString.Length)
        // Write the stream properties to the console.
            "Capacity = {0}, Length = {1}, Position = {2}\n",
        // Set the position to the beginning of the stream.
        memStream.Seek(0, SeekOrigin.Begin);
        // Read the first 20 bytes from the stream.
        byteArray = new byte[memStream.Length];
        count = memStream.Read(byteArray, 0, 20);
        // Read the remaining bytes, byte by byte.
        while(count < memStream.Length)
            byteArray[count++] = Convert.ToByte(memStream.ReadByte());
        // Decode the byte array into a char array
        // and write it to the console.
        charArray = new char[uniEncoding.GetCharCount(byteArray, 0, count)];
        uniEncoding.GetDecoder().GetChars(byteArray, 0, count, charArray, 0);

I have a problem with code examples that try and do too much. Here is a much less complex example of writing a string to the console from a MemoryStream.

private static void Main(string[] args)
    using (var memoryStream = new MemoryStream(100))
    using (var streamWriter = new StreamWriter(memoryStream))
    using (var streamReader = new StreamReader(memoryStream))
        var invalidPath = new string(Path.GetInvalidPathChars());
        streamWriter.WriteLine("Invalid file path characters are:");
        memoryStream.Position = 0;
        var stringToOutput = streamReader.ReadToEnd();