什么是IBuffer?

What is IBuffer for?

在修改一些低级代码时,我偶然发现了 .Net 的 IBuffer 界面。该接口仅声明了两个属性 - LengthCapacity.

问题:

来自 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; }
}