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[])の間の変換.
byte[] buffer = System.Text.Encoding.Default.GetBytes(" ");
string str = System.Text.Encoding.Default.GetString(buffer);