MemoryStream.TryGetBuffer何时返回一个有用的ArraySegment?

时间:2015-06-12 16:47:35

标签: .net memorystream

bool MemoryStream.TryGetBuffer(out ArraySegment<byte> buffer)是.NET 4.6中的一个新API,可用于访问存储在MemoryStream中的有效字节,而无需复制它们。这非常令人兴奋!它返回一个bool,如果转换成功,则返回true;否则,假&#34;并填充了外面的参数。

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

我知道如果它返回false,我可以使用.ToArray()来获取字节的副本。并且,我们已经.GetBuffer(),但有时MemoryStreams是在缓冲区中创建的,并且此信息为hard (well, sort of) to get later on,更不用说健壮性所需的try ... catch。< / p>

2 个答案:

答案 0 :(得分:12)

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

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

查看source code了解详情。

答案 1 :(得分:-3)

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

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

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

ToArray返回字节(长度)