IBuffer是用来做什么的?

4

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

问题:

  • 这个接口是用来做什么的?
  • 由于只有 LengthCapacity 被公开,被调用者如何访问实际数据?

看起来实现是不透明的,你总是通过读取器或写入器对象访问,就像Sharped的链接中所示。 - Steve Mitcham
1
它不是 .NET 类型,而属于 WinRT。当你为 Windows Store 或 Phone 编写应用程序时使用的 API。你可以使用 DataReader 类访问缓冲区中的数据。它与 .NET 的 BinaryReader 类非常相似。 - Hans Passant
2个回答

4

来自MSDN:

当您实现IBuffer接口时,必须实现IBufferByteAccess接口,该接口是用于直接访问缓冲区的COM接口。

因此,回答您的第二个问题是,通过实现IBufferByteAccess接口来处理数据访问。

至于用例,MSDN说:

IBuffer接口由IInputStream和IOutputStream接口使用。

您可以在此处找到更多信息。


3

1) IBuffer接口用于传递缓冲区。IBuffer对象表示一个字节数组。

该接口没有提供访问缓冲区字节的方法。原因是WinRT类型不能在元数据中表达指针,因为指针对某些语言(如JavaScript或安全的C#代码)不易映射。虽然该接口可以提供一种访问缓冲区中单个字节的方法,但每次调用方法获取字节会严重影响性能。

2) 在内部,CLR可以获取IBuffer对象并查询其IBufferByteAccess接口,然后查询Buffer属性以获取缓冲区中包含的字节的不安全指针。有了指针,就可以直接访问字节。

internal interface IBufferByteAccess {
    unsafe Byte* Buffer { get; }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接