我在MemoryStream
中有一堆数据,我想将所有数据都写到BinaryWriter
中。
对我来说幸运的是,所有流现在都有一个Stream.CopyTo(Stream)
method,我可以从BinaryWriter.BaseStream
property获取目标流。
public void WriteTo(BinaryWriter writer)
{
this.memoryStream.CopyTo(writer.BaseStream);
}
我是否可以像这样安全地绕过编写器,然后将其直接复制到基本流中,否则这会破坏编写器的缓冲区,位置或其他内容吗?或者,您如何建议将
Stream
复制到BinaryWriter
? 最佳答案
如果您不想弄乱初始流中的数据,则不会执行以下操作:
var myStreamInitially = new MemoryStream();
var myStreamClone = new MemoryStream();
myStreamInitially.CopyTo(myStreamClone);
var binaryWriteb = new BinaryWriter(myStreamClone);
如果您使用的是.NET 4+,则CopyTo方法非常方便。
更新
这不是比更改baseStream底层baseStream更安全的方法:
void WriteToStreamInUnknownStatus(BinaryWriter binaryWriter)
{
var myStream = new MemoryStream();
try
{
binaryWriter.Write(myStream.ToArray());
}
catch
{ }
}
更新2
如果尝试此操作,则会出现异常:“内存流不可扩展”
static void Main(string[] args)
{
var binaryWrite = new BinaryWriter(new MemoryStream(new byte[] {1, 2, 3, 4}));
binaryWrite.Seek(3, SeekOrigin.Begin);
var position = binaryWrite.BaseStream.Position;
new MemoryStream(new byte[] {1, 2, 3, 4}).CopyTo(binaryWrite.BaseStream);
position = binaryWrite.BaseStream.Position;
}
因此,除了必须确保该属性是线程安全的之外,您还需要了解内部流的类型。冒IMO的风险。
关于c# - 将数据从MemoryStream直接复制到BinaryWriter.BaseStream吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17369782/