StreamとByte[]の相互運用
1614 ワード
はい.NetのIOオペレーションでは、StreamとByte[]の2つの形式でよく使用されます.
一、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;
}
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();
}
}
二、bytes->Stream:
メモリ・ストリームを直接使用します.コードは次のとおりです.
MemoryStream ms=
new MemoryStream(bytes)
文字列(string)とbyte(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;
}
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();
}
}
二、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);