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>
答案 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返回字节(长度)