Stream 和 Byte[] 互操作
在 .Net 的 IO 操作中经常会用到 Stream 和 Byte[],有两种形式:
一、Stream -> Byte[]:
1. 如果 Stream 的 Length 属性可读,非常的简单,代码如下:
private byte[] GetBytes(Stream stream)
{
if (stream.CanSeek)
{
Byte[] buffer = new byte[stream.Length];
stream.Write(buffer, 0, buffer.Length);
return buffer;
}
//用下面的方法
return null;
}
{
if (stream.CanSeek)
{
Byte[] buffer = new byte[stream.Length];
stream.Write(buffer, 0, buffer.Length);
return buffer;
}
//用下面的方法
return null;
}
2. 如果 Stream 的 Length 属性不可读,代码如下:
private byte[] GetBytes(Stream stream)
{
using (MemoryStream mstream = new MemoryStream())
{
byte[] bytes = new byte[1024]; //此处不易设置太大或太小的值,且应该为2的次方
if (stream.CanRead)
{
while (true)
{
int length = stream.Read(bytes, 0, bytes.Length);
if (length <= 0)
{
break;
}
mstream.Write(bytes, 0, length);
}
}
return mstream.ToArray();
}
}
{
using (MemoryStream mstream = new MemoryStream())
{
byte[] bytes = new byte[1024]; //此处不易设置太大或太小的值,且应该为2的次方
if (stream.CanRead)
{
while (true)
{
int length = stream.Read(bytes, 0, bytes.Length);
if (length <= 0)
{
break;
}
mstream.Write(bytes, 0, length);
}
}
return mstream.ToArray();
}
}
二、bytes -> Stream:
直接使用内存流即可 , 代码如下:
MemoryStream ms=new MemoryStream(bytes)
字符串(string)与 byte(byte[]) 之间的转换。
byte[] buffer = System.Text.Encoding.Default.GetBytes("字符串");
string str = System.Text.Encoding.Default.GetString(buffer);