gpt4 book ai didi

c# - 将数据从 MemoryStream 直接复制到 BinaryWriter.BaseStream?

转载 作者:行者123 更新时间:2023-11-30 20:56:46 30 4
gpt4 key购买 nike

我在 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 的 binaryStream 更安全吗:

    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/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com