修补一些低级代码,我偶然发现了.Net的IBuffer
界面。此接口仅声明两个属性 - Length
和Capacity
。
问题:
Length
和Capacity
,被叫方如何访问实际数据? 答案 0 :(得分:3)
来自MSDN:
实现IBuffer接口时,必须实现IBufferByteAccess接口,这是一个直接访问缓冲区的COM接口
因此,为了回答您的第二个问题,IBufferByteAccess接口的实现将关注访问数据。
至于用例MSDN说:
IBuffer接口由IInputStream和IOutputStream接口使用。
您可以找到更多here
答案 1 :(得分:3)
1)IBuffer接口用于传递缓冲区。 IBuffer对象表示一个字节数组。
接口无法访问缓冲区的字节。原因是WinRT类型无法在元数据中表达指针,因为指针不能很好地映射到某些语言(如JavaScript或安全的C#代码)。接口可以提供一种访问缓冲区中单个字节的方法,但调用一个方法来获取每个字节会对性能造成太大影响。
2)在内部,CLR可以获取IBuffer对象,查询其 IBufferByteAccess 接口,然后查询Buffer属性以获取指向缓冲区中包含的字节的不安全指针。使用指针,可以直接访问字节。
internal interface IBufferByteAccess {
unsafe Byte* Buffer { get; }
}