用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(非法状态例外)。
本文拷贝于网络。
完。
用DIME格式来组织自定义格式的更多相关文章
- js 时间戳转换成时间格式,可自定义格式
由于 c# 通过ajax获取的时间 传到前台 格式为:/Date(1354116249000)/ 所以需要转换一下,想要什么格式 更改 format() 里的 返回语句 就可以了 formatDate ...
- Excel 单元格自定义格式技巧总结
第一部分 Excel 中的单元格格式是一个最基本但是又很高级的技能,说它基本是因为我们几乎天天都会用到它,会用它来设置一些简单的格式,比如日期,文本等等:高级是因为利用 Excel 单元格的自定义格式 ...
- 代码中设置excel自定义格式为[红色]的处理方法
有时候,excel的自定义格式设置时 ,会遇到需要设置为¥#,##0;[红色]¥-#,##0的格式. 其中会带一个颜色标记,但是如果这样的一句代码,放在英文版的Office里面,就失效了,因为英文版应 ...
- logback自定义格式转换器
创建自定义格式转换符有两步. 首先,必须继承ClassicConverter类.ClassicConverter对象负责从ILoggingEvent 提取信息,并产生一个字符串.例如,LoggerCo ...
- 用 Lua 控制 MIDI 合成器来播放自定义格式乐谱
用 Lua 控制 MIDI 合成器来播放自定义格式乐谱 作者: FreeBlues 最新: https://www.cnblogs.com/freeblues/p/9936844.html 说明: 本 ...
- TensorFlow 自定义模型导出:将 .ckpt 格式转化为 .pb 格式
本文承接上文 TensorFlow-slim 训练 CNN 分类模型(续),阐述通过 tf.contrib.slim 的函数 slim.learning.train 训练的模型,怎么通过人为的加入数据 ...
- 常用输入法快速输入自定义格式的时间和日期(搜狗/QQ/微软拼音)
几个主流的输入法输入 rq 或者 sj 都可以得到预定义格式的日期或者时间.然而他们都是预定义的格式:当我们需要一些其他格式的时候该怎么做呢? 本文将介绍几个常用输入法自定义时间和日期格式的方法. 主 ...
- Html Table用JS导出excel格式问题 导出EXCEL后单元格里的000412341234会变成412341234 7-14 会变成 2018-7-14(7月14) 自定义格式 web利用table表格生成excel格式问题 js导出excel增加表头、mso-number-format定义数据格式 数字输出格式转换 mso-number-format:"\@"
Html Table用JS导出excel格式问题 我在网上找的JS把HTML Tabel导出成EXCEL.但是如果Table里的数字内容为0开的的导成Excel后会自动删除0,我想以text的格式写入 ...
- (转)Excel自定义格式详解
”G/通用格式”:以常规的数字显示,相当于”分类”列表中的”常规”选项.例:代码:”G/通用格式”.10显示为10:10.1显示为10.1. 2. “#”:数字占位符.只显有意义的零而不显示无意义的零 ...
随机推荐
- B1789 Y型项链 贪心
想明白之后就是一道大水题,就是两两把最长公共前缀求出来,然后直接取最长的,然后就直接暴力算就行了... 题干: Description 欢乐岛上众多新奇的游乐项目让小可可他们玩的非常开心.现在他们正在 ...
- git使用简易指南(转)
创建新仓库 创建新文件夹,打开,然后执行 git init以创建新的 git 仓库. 检出仓库 执行如下命令以创建一个本地仓库的克隆版本:git clone /path/to/repository 如 ...
- (Go)06. Printf格式化输出、Scanf格式化输入详解
Print.Println .Printf .Sprintf .Fprintf都是fmt 包中的公共方法,在需要打印信息时需要用到这些函数,那么这些函数有什么区别呢? Print: 输出到控制台(不接 ...
- poj2975 Nim(经典博弈)
Nim Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 5866 Accepted: 2777 Description N ...
- 爬虫框架Scrapy与Web框架Django结合
在做两者结合之前,需要先准备一个可以独立运行的Scrapy框架和一个可以独立运行的Django框架! 当准备好这两个框架之后,就可以做两者的结合了. 一. 把scrapy框架,移动到Django框架的 ...
- Springboot 版本+ jdk 版本 + Maven 版本的对应关系
Spring boot 版本 Spring Framework jdk 版本 maven 版本 1.2.0 版本之前 6 3.0 1.2.0 4.1.3+ 6 3.2+ 1.2.1 4.1.3+ ...
- BZOJ 3930 容斥原理
思路: 移至iwtwiioi http://www.cnblogs.com/iwtwiioi/p/4986316.html //By SiriusRen #include <cstdio& ...
- E - Perfect Number
Problem description We consider a positive integer perfect, if and only if the sum of its digits is ...
- Windows phone开发 网络编程之HttpWebRequest
HttpWebRequest和WebClient的区别1,HttpWebRequest是个抽象类,所以无法new的,需要调用HttpWebRequest.Create();2,其Method指定了请求 ...
- CSS多列布局(实例)
前言 一列布局 二列布局 三列布局 1 一列布局 一列布局: HTML部分 <!DOCTYPE html> <html> <head> <meta chars ...