|
A stream in .Net is a sequence of bytes. There are several types of streams. A common one is the MemoryStream which uses memory for its storage (as opposed to a file system, or something else). Several readers and writers require a stream as an input parameter, and you'll find that sometimes you'll just want to be able to easily convert from a string to a MemoryStream and back. Here are two easy utility methods to do that:
public static string GetStringFromMemoryStream(MemoryStream m)
{
if (m == null || m.Length == 0)
return null;
m.Flush();
m.Position = 0;
StreamReader sr = new StreamReader(m);
string s = sr.ReadToEnd();
return s;
}
public static MemoryStream GetMemoryStreamFromString(string s)
{
if (s == null || s.Length == 0)
return null;
MemoryStream m = new MemoryStream();
StreamWriter sw = new StreamWriter(m);
sw.Write(s);
sw.Flush();
return m;
}
We can easily test these with a round-trip method. Note that ideally we'd have one test for each specific method, but this is just for demo purposes:
[TestMethod]
public void Convert_RoundTrip()
{
string s1 = "Hello World!";
MemoryStream m = GetMemoryStreamFromString(s1);
Assert.AreEqual(12, m.Length);
string s2 = GetStringFromMemoryStream(m);
Assert.AreEqual(s1, s2);
}
Hi! Regarding your implementation of the methods:
1. MemoryStream created and returned in the GetMemoryStreamFromString
method is going to be set to the end of the stream by the StreamReader.
Shouldn't you set it to the beginning of the stream, prior to passing it
back to the caller?