【问题标题】:When will MemoryStream.TryGetBuffer return a useful ArraySegment?MemoryStream.TryGetBuffer 何时会返回有用的 ArraySegment?
【发布时间】:2015-06-12 16:47:35
【问题描述】:

bool MemoryStream.TryGetBuffer(out ArraySegment<byte> buffer) 是 .NET 4.6 中的新 API,可用于访问 MemoryStream 中存储的有效字节,而无需复制它们。这非常令人兴奋!它返回一个布尔值,“如果转换成功则为真;否则为假”并填充输出参数。

什么时候返回true,表示out ArraySegment<byte> buffer现在包含有效信息?今天没有记录。

我知道如果它返回 false,我可以使用 .ToArray() 来获取字节的副本。而且,我们有 .GetBuffer(),但有时 MemoryStreams 会在缓冲区中创建一个偏移量,并且此信息是 hard (well, sort of) to get later on,更不用说稳健性所需的 try ... catch

【问题讨论】:

    标签: .net memorystream


    【解决方案1】:

    要使TryGetBuffer 成功执行转换并使用有用信息填充输出参数,缓冲区必须是可见的。如果使用这些构造函数中的任何一个,则缓冲区是可见的:

    • MemoryStream()
    • MemoryStream(int capacity)
    • MemoryStream(byte[] buffer, int index, int count, bool writable, bool publiclyVisible)publiclyVisible: true

    查看source code了解更多详情。

    【讨论】:

      【解决方案2】:

      GetBuffer 返回内存中的所有字节,与使用无关,

      例如: 容量 = 100000,长度 = 200

      GetBuffer(和 TryGetBuffer !?)返回字节(容量)

      ToArray 返回字节(长度)

      【讨论】:

        猜你喜欢
        • 2011-08-11
        • 1970-01-01
        • 1970-01-01
        • 2013-12-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-05-07
        相关资源
        最近更新 更多