我想把一个流(System.Net.ConnectStream)转换成字节数组。有什么想法/示例可以做到这一点吗?
我想把一个流(System.Net.ConnectStream)转换成字节数组。有什么想法/示例可以做到这一点吗?
Stream sourceStream = ... // the ConnectStream
byte[] array;
using (var ms = new MemoryStream())
{
sourceStream.CopyTo(ms);
array = ms.ToArray();
}
Stream.CopyTo
仅适用于 .NET 4.0 及以上版本。有关 4.0 之前版本的内容,请参阅 Kevin 的答案。 - Scott Chamberlain试试这个...
private static readonly object _lock = new object();
public static byte[] readFullStream(Stream st)
{
try
{
Monitor.Enter(_lock);
byte[] buffer = new byte[65536];
Int32 bytesRead;
MemoryStream ms = new MemoryStream();
bool finished = false;
while (!finished)
{
bytesRead = st.Read(buffer.Value, 0, buffer.Length);
if (bytesRead > 0)
{
ms.Write(buffer.Value, 0, bytesRead);
}
else
{
finished = true;
}
}
return ms.ToArray();
}
finally
{
Monitor.Exit(_lock);
}
}
64 << 10
替换65536
,其中左边是你的数字,右边是0 = 字节,10 = 千字节,20 = 兆字节,30 = 吉字节等...
所以一个2MB的缓冲区将会是2 << 20
。 - Scott Chamberlain
byte[]
)中。请参考 MSDN 上的Stream.Read
。 - Oded