什么是IBuffer?
What is IBuffer for?
在修改一些低级代码时,我偶然发现了 .Net 的 IBuffer
界面。该接口仅声明了两个属性 - Length
和 Capacity
.
问题:
- 这个界面是做什么用的?
- 由于只有
Length
和 Capacity
被公开,被调用者如何访问实际数据?
来自 MSDN:
When you implement the IBuffer interface, you must implement the IBufferByteAccess interface, which is a COM interface for accessing the buffer directly
所以为了回答你的第二个问题,访问数据是通过 IBufferByteAccess 接口的实现来处理的。
关于用例 MSDN 说:
The IBuffer interface is used by the IInputStream and IOutputStream interfaces.
您可以找到更多 here
1) IBuffer 接口用于传递缓冲区。 IBuffer 对象表示一个字节数组。
接口不提供访问缓冲区字节的方法。这样做的原因是 WinRT 类型无法在其元数据中表达指针,因为指针不能很好地映射到某些语言(如 JavaScript 或安全的 C# 代码)。该接口可以提供一种方法来访问缓冲区中的各个字节,但是调用一个方法来获取每个字节会严重损害性能。
2) 在内部,CLR 可以获取一个 IBuffer 对象,查询其 IBufferByteAccess 接口,然后查询 Buffer 属性 以获得指向包含在其中的字节的不安全指针缓冲区。有了指针,就可以直接访问字节了。
internal interface IBufferByteAccess {
unsafe Byte* Buffer { get; }
}
在修改一些低级代码时,我偶然发现了 .Net 的 IBuffer
界面。该接口仅声明了两个属性 - Length
和 Capacity
.
问题:
- 这个界面是做什么用的?
- 由于只有
Length
和Capacity
被公开,被调用者如何访问实际数据?
来自 MSDN:
When you implement the IBuffer interface, you must implement the IBufferByteAccess interface, which is a COM interface for accessing the buffer directly
所以为了回答你的第二个问题,访问数据是通过 IBufferByteAccess 接口的实现来处理的。
关于用例 MSDN 说:
The IBuffer interface is used by the IInputStream and IOutputStream interfaces.
您可以找到更多 here
1) IBuffer 接口用于传递缓冲区。 IBuffer 对象表示一个字节数组。
接口不提供访问缓冲区字节的方法。这样做的原因是 WinRT 类型无法在其元数据中表达指针,因为指针不能很好地映射到某些语言(如 JavaScript 或安全的 C# 代码)。该接口可以提供一种方法来访问缓冲区中的各个字节,但是调用一个方法来获取每个字节会严重损害性能。
2) 在内部,CLR 可以获取一个 IBuffer 对象,查询其 IBufferByteAccess 接口,然后查询 Buffer 属性 以获得指向包含在其中的字节的不安全指针缓冲区。有了指针,就可以直接访问字节了。
internal interface IBufferByteAccess {
unsafe Byte* Buffer { get; }
}