eclipse plus学习日志5:Runtime overview-Content types-1

Content types

content包提供了检测数据流的内容类型的支持。
内容类型被Eclipse的一些内容敏感特性所使用,例如自动编码确定、编辑器选择和菜单贡献。
中心内容注册中心允许插件请求内容类型检测,并找出可用的内容类型以及它们之间的关系。
内容类型注册表是可扩展的,因此插件可以提供新的内容类型定义。

目录

Content types

Using content types

Finding out about content types

Detecting the content type for a data stream

Describing a data stream

Providing content-sensitive features


Using content types

注意:在这个讨论中,我们特别避免在讨论内容时使用file这个词。
运行时内容引擎不假定内容包含在文件系统中的文件中。
但是,它确实包括允许内容类型与文件命名模式相关联的协议。
在实践中,这些文件名表示文件系统中的文件,但是在内容系统的实现中没有假定内容位于文件系统中。
文件编码和内容类型讨论了平台资源插件提供的面向文件的内容类型功能,是对在该上下文中使用内容类型API感兴趣的开发人员的必读内容。

 

Finding out about content types

内容类型由IContentType表示。
该接口表示唯一的内容类型,该类型知道如何读取数据流并解释特定于内容类型的信息。
内容类型本质上是分层的。
例如,XML数据的内容类型被认为是文本内容类型的子类型。
这允许新的内容类型利用更一般内容类型的属性或行为。

IContentTypeManager是入口点,它允许访问平台运行时提供的大部分与内容类型相关的API。
要获取平台IContentTypeManager的引用,客户端可以使用平台API:

IContentTypeManager contentTypeManager = Platform.getContentTypeManager();

客户端可以使用平台IContentTypeManager来查找系统中的内容类型。

  • getAllContentTypes允许客户端获得平台中定义的所有内容类型。
  • getContentType允许客户端通过其唯一标识符获取内容类型。

Detecting the content type for a data stream

给定一个字节流,可以通过调用IContentTypeManager API来确定它的内容类型,如下所示:

InputStream stream = ...;
IContentType contentType = contentTypeManager.findContentTypeFor(stream, "file.xml");
stream.close();

这将根据提供的输入返回最合适的IContentType,如果没有找到则返回null。
对于一个给定的数据流,可以认为多种内容类型是合适的。
在这种情况下,平台使用一些启发式方法来确定应该选择哪一个。
文件名是选择内容类型的第一个标准。
可以忽略它,但这样会有两个问题:结果可能不正确,因为许多不相关的内容类型可能接受相同的输入;
因为平台上的所有内容类型都需要有分析流的机会,所以这也会带来很大的性能冲击。
因此,除非文件名不可用,否则客户端应该总是随流提供文件名。

Describing a data stream

平台中内容类型支持的另一个有趣特性是能够描述二进制流或字符流的内容。
下面的代码片段展示了如何做到这一点:

InputStream stream = ...; 
IContentDescription description = contentTypeManager.getDescriptionFor(stream, "file.xml");
stream.close();

返回的IContentDescription实例描述内容类型和从提供的内容中提取的其他相关信息。
内容描述以键/值对的形式存储特定于内容的属性。
平台本身能够描述诸如基于文本的流的字符集和字节顺序之类的属性,但是其他属性可以由内容类型提供者定义。

Providing content-sensitive features

新的内容类型通常被定义为现有内容类型的专门化。
这个层次结构在派生内容类型与其基类型之间建立了“是一个”关系。
插件开发人员在实现内容敏感特性时必须尊重这一点。
如果给定的特性适用于给定的内容类型,那么该特性也必须适用于任何派生的内容类型。
IContentType.isKindOf(IContentType superType) 方法允许确定两个IContentType是否相关。
IContentType. getbasetype() 方法允许确定给定IContentType的基类型。

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值