【问题标题】:Append bytes to MemoryStream without moving the position在不移动位置的情况下将字节附加到 MemoryStream
【发布时间】:2016-10-01 13:16:47
【问题描述】:

我正在尝试使用 Write(); 将数据附加到 MemoryStream;方法 但这也会移动位置。我知道我可以手动更改位置。 但是有没有办法在不移动位置的情况下将数据附加到 MemoryStream

using (MemoryStream stream = new MemoryStream())
            using (BinaryReader reader = new BinaryReader(stream))
            {
                byte[] data = new byte[20];
                Random rand = new Random();
                rand.NextBytes(data);

                stream.Write(data, 0, 20);
                Console.WriteLine(reader.ReadInt32());//Pointer = 20 here
            }

谢谢

【问题讨论】:

  • 不,读或写逻辑上会推进当前位置。如果这是您想要的并且流支持它,您可以根据写入的字节数将其设置回来。

标签: c# memorystream


【解决方案1】:

不,MemoryStream 本身没有任何功能可以做到这一点。对于流来说,这也是逻辑行为。

但这也意味着,如果您自己这样做,就没有错。如果您的意图是有某种好方法来重用此功能,我建议为MemoryStream 编写一个简单的扩展方法:

public static class Extensions
{
    public static void WriteAndResetPosition(this MemoryStream stream, byte[] data, int offset, int count)
    {
        stream.Write(data, offset, count);
        stream.Position -= count;
    }    
} 

那是大脑编译的代码 :),所以对它持保留态度。之后,您可以像这样使用它:

stream.WriteAndResetPosition(data, 0, 20);

【讨论】:

  • 大脑编译的代码...我的总是包含递归。
  • @ShannonHolsinger 只要不是脑执行就可以!
猜你喜欢
  • 1970-01-01
  • 2020-08-04
  • 2015-01-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-24
  • 2020-05-06
相关资源
最近更新 更多