JAF初识

         公司之后的项目中可能会用到jaf这个技术,对此以前并不了解,借此机会接触了一下这个概念,之后在再项目中可能会有更加深入的应用,下面将自己了解的内容分享给大家。

 

         JAF全称是JavaBeansActivation Framework

         JAF的目的在于统一处理不同数据格式的方法(不管数据格式为简单文本还是由图片、声音、视频甚至其它 " 活动 " 内容共同组成的复合文档)。在这个意义上, JAF Java 的作用正如插件对 Web 浏览器的作用。 JAF 使得 Java 对象 与编码数据流 之间的映射变得非常容易。

        JAF完成于1998 年,当时 JavaBean 非常流行, Swing 非常热门, Servlet 刚刚出现,J2EE 平台还没有。那时 Sun 需要一个用于文件浏览器和 JavaMail 的标准发现 API ,此需要推动了 JAF 的创建。“发现”指可以动态找到正确的组件以处理任意但类型化了的数据的机制 。特别是,作为发现 API 来开发 JAF ,以便使 GUI 开发人员能够为文档和图像数据动态地发现浏览器和编辑器。

         发现取决于注册的类型,注册可以将每一文件类型与对应的应用程序建立关联。

        简单的说,JAF 提供了用于动态发现可视窗口部件以处理由 MIME 文件头描述的各种数据的架构。当用于 SAAJ 这样的非可视系统时, JAF 可以将 Java 类型 映射到将它们无缝转换到数据流的特殊处理程序 ,从而允许 SAAJ Java 对象自动转换成由 SwA MIME 部分包含的原始数据

        1. DataHandler

         JAF 架构的核心是 javax.activation.DataHandler 类。 DataHandler 类定义了三个构造函数:

        PublicDataHandler(DataSource ds)

        Public DataHandler(java.net.URL url)

        Public DataHandler(Object obj, String mimeType)

        当使用前两个构造函数时,数据处理会委托到 DataSource 接口的一个子类型,使用第三个构造函数时,数据处理委托到一个动态发现的内容处理程序并使用此处理程序。

         如果DataHandler 是用 DataSource 对象构造的,那么它将首先试图试图将 getContent() 方法委托到一个 DCH (DataContextHandler),如果它没有找到 DCH ,会返回一个从DataSource 中得到的 InputStream 。有趣的是, DataHandler 总是试图首先委托到一个 DCH ,即便是用 DataSource 创建 DataHandler 也是如此

         上述说明的问题看似简单,但实际上非常重要,它说明了 getContent() 方法的作用。 getContent() 方法要返回一个表示附件的 Java 对象, DataSource InputStream 只作为最后一种手段来返回 。从 DCH 中返回的对象类型取决于 DCH 的编码方式。 

          2. DataContentHandler

          此接口用于实现将 Java 对象流转换成数据流,或将数据流转换成 Java 对象。

     DataContentHandler 类型的每一个子类 ( 即每一个 DCH) 均用于自动将 Java 对象的专用类型转换为流,以及将流转换成 Java 对象。如某个 DCH 能够将 java.awt.Image 对象转换为 JPEG GIF 编码流,或者进行反向转换。DCH 的缺点是它们的使用范围通常受到很大的限制,每一个 DCH 只能讲一个对象类型 转换成一种类型的数据流

         DCH 不同, DataSource 对象只处理数据流。用户要用 DataSource 从某种类型的资源中读数据流,并将数据流写入 DataSource 。,此时重点放在了流上而不是 Java 对象类型上。从而 DataSource 具有很大的通用性,其缺点为不宜于使用,因为用户直接处理的是流而不是 Java 对象。

         3. DataSource

          DataSource 类拥有完成委托操作所需要的全部功能。当使用 DataSource URL 参数构造 DataHandler 时, DataHandler 要使用 DataSource 而不是 DCH

           JAF 定义了两个标准的 DataSource 对象,即 FileDataSource 对象和 URLDataSource 对象。 某些 DataSource 实现用于动态发现它们的MIME 类型。例如, FileDataSource MIME 类型注册表发现它的 MIME 类型。 JAF 中的默认 MIME 类型注册表是 mimetypes.default 文件,该文件包含在 JAF 二进制 JAR 文件中。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值