Wednesday, February 20, 2008

interconvert byte[] and string and stream

keywords: C#, byte array, string, stream


stream和string和byte[]都是内存中的对象, 一般而言, string和byte[]都是轻量级的数据包装体, 在作layer间数据交换应优先使用它们, 因为它们占用更少的内存. 但它们本身的成员方法比较少, 尤其在持久化方面, 有可能需要借助Stream来完成, 那么怎样将string和byte[]转化成stream呢? 本文给出了一些代码. 有关不同类型stream相互转换, 可以参考另一篇文章(http://focuswindows.blogspot.com/2008/02/convert-filestream-fromto-memorystream.html).




/// <summary>
///如果你并不需要解析转换后的String, 那么可以将byte数组转换成Base64String.
/// 使用这个方法你不需要关心buffer数组中每个byte的编码, 统统都可以将它们转换成Base64String.
/// because Base64 store one char in 64 digits.
/// But the Base64 char is hard to recognized compared with the ASCII encode.
/// </summary>
/// <param name="buffer"></param>
/// <returns></returns>
public string ConvertBytesToBase64String(byte[] buffer)
{
return Convert.ToBase64String(buffer);
}


/// <summary>
/// 将一个Base64String转换成Byte[]
/// </summary>
/// <param name="str"></param>
/// <returns></returns>
public byte[] ConvertBase64StringToBytes(string str)
{
return Convert.FromBase64String(str);
}



/// <summary>
/// 将Stream转换为String
/// </summary>
/// <param name="ms"></param>
/// <returns></returns>
public string ConvertStreamIntoString(Stream ms)
{
//使用StreamReader应该是读取Stream最简单的方法
System.IO.StreamReader reader = new StreamReader(ms);
ms.Position = 0;
return reader.ReadToEnd();
}


/// <summary>
/// 将string转换成stream
/// </summary>
/// <param name="str"></param>
/// <returns></returns>
public MemoryStream ConvertStringToMemoryStream(string str)
{
MemoryStream ms=new MemoryStream() ;
//使用一个StreamWriter来将str写到一个MemoryStream
using (StreamWriter writer = new StreamWriter(ms))
{
writer.Write(str);
writer.Flush();
}
return ms;
}

No comments: