【发布时间】:2011-06-11 18:59:58
【问题描述】:
如何在 C# 中将 struct System.Byte byte[] 转换为 System.IO.Stream 对象?
【问题讨论】:
如何在 C# 中将 struct System.Byte byte[] 转换为 System.IO.Stream 对象?
【问题讨论】:
将字节数组转换为流的最简单方法是使用MemoryStream 类:
Stream stream = new MemoryStream(byteArray);
【讨论】:
stream.ToArray()。
您正在寻找MemoryStream.Write method。
例如,以下代码会将byte[]数组的内容写入内存流:
byte[] myByteArray = new byte[10];
MemoryStream stream = new MemoryStream();
stream.Write(myByteArray, 0, myByteArray.Length);
或者,您可以基于字节数组create a new,不可调整大小的MemoryStream 对象:
byte[] myByteArray = new byte[10];
MemoryStream stream = new MemoryStream(myByteArray);
【讨论】:
MemoryStream.Write 比new MemoryStream(myByteArray) 消耗更多内存
MemoryStream 缓冲区中分配了额外的空间(就像列表一样)。这可以通过使用允许您设置容量的重载轻松处理,但只有在您不希望将任何数据写入流(或者如果您知道您可能需要多少额外字节时)才真正有用)。但我怀疑 jitbit 可能指的是当您使用 byte[] 构造函数时,不会复制数组 - MemoryStream 指的是参数中的数组。这可能是好的也可能是坏的,有点遗憾的是它没有在 MSDN 上记录:)
写入任何流(不仅是MemoryStream)的一般方法是使用BinaryWriter:
static void Write(Stream s, Byte[] bytes)
{
using (var writer = new BinaryWriter(s))
{
writer.Write(bytes);
}
}
【讨论】:
查看MemoryStream 类。
【讨论】:
如果您在此处的其他 MemoryStream 示例中遇到错误,则需要将 Position 设置为 0。
public static Stream ToStream(this bytes[] bytes)
{
return new MemoryStream(bytes)
{
Position = 0
};
}
【讨论】: