用DIME格式来组织自定义格式

直接网际消息封装(Direct Internet Message Encapsulation,即DIME)格式提供了一种简单而又标准的机制,这个机制可以把多文本(multiple text)和二进制数据记录合到一个单一的二进制流中。记录可以以一种高效解析且易于实现的独立编码方式保存。你可以在这儿找到DIME规范。

DIME优于MIME和raw XML

当然,其它系统也规定了多文本和二进制数据合并的方案。但是它们都仅对某方面的问题进行了优化,这就使得它们在非电子邮件通信、应用内部通信的场合下不尽完善。

MIME

由2045到2049号Internet标准(草案)所定义的多用途网际邮件扩充协议(Multipurpose Internet Mail Extensions 即MIME)是目前最显眼的可选项。MIME是电子邮件文件附件的标准,它仅仅是文本和二进制部分的消息。因此,MIME在内部把文本和二进制部分转化为全文本格式。这种转化不仅使得二进制部分转化后的长度大大增加,还导致了交叉平台上的字符集和编码问题。

Raw XML

Raw XML提供了另外一种表示文本中二进制信息的机制——CDATA类型。但是CDATA块不能被XML解析器解析,因此它不符合XML文档“好的组织(well-formedness)”的要求。把二进制数据转换到模64(base 64)或者类似的进行类似的编码后保存到CDATA块,这样的CDATA块会使得你的XML组织的很差。

DIME

与MIME和XML文档中的CDATA部分不同,DIME把文本和二进制部分都转换成单一的二进制消息。把二进制部分按它原来的二进制方式保存可以免除DIME解析器从文本中恢复二进制编码的开销和复杂度,而这些开销和复杂度是MIME和CDATA/XML所必不可少的。确实,DIME部分中的简单长度定义分界(simple length-delimited)性质使得DIME解析器可以不用考虑二进制数据的内部就可以分开记录,而过去这么做需要初始二进制头。

程序清单A给出了用一个免费可用的Java DIME实现来创建DIME消息的简单代码。头几行代码用一个FileOutputStream对象做为输出源创建了一个DimeGenerator对象。代码的第二和第三部分分别加入了一个从磁盘文本文件创建的DIME记录。请注意MEDIA_TYPE TypeNameFormat的用法,还要注意“text/plain”和“image/gif”MIME类型用来指示DIME记录的内容。MIME类型仅是DIME规范指出的可以提供DIME记录所保存数据信息的方法中的一种,但是可能是最有用的一种了。

清单A中代码的最后一部分结束DIME消息并关闭输出数据文件。DimeGenerator类可以使用所有I/O操作的流,这样就消除了消息建立期间用来保存DIME记录所需要使用的大量内存。还要注意addRecord方法(本例调用两次)所用到的最后一个参数(布尔型)。如果参数取值为“真”,代表添加到DimeGenerator的记录是最后一个记录,如果再添加记录就会导致IllegalStateException(非法状态例外)。

 

本文拷贝于网络。

完。

转载于:https://www.cnblogs.com/liyou-blog/p/4177856.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值