`
zetawangyi
  • 浏览: 1663 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

浅谈Umd文件格式

阅读更多

    网站(http://www.shoujihw.com/)完成之后,一直都想写些什么,但又总觉得没什么好写,这几天上网,看到好几个网友找手机Umd文件的格式相关说明,回想起当时自己做这个也花了不少时间,因此总结一下,希望对有这方面需求的用户有所帮助。

    另外:本网站(http://www.shoujihw.com/)的手机电子书转Umd部分就是用本文的方法生成的,是Java代码,有需要的用户可以联系我的QQ:13494612,我可以提供源代码。

    好,言归正传,开始我们的Umd之旅。

    Umd文件有两种格式,一种是文本格式,另一种是漫画格式,考虑到主要的需求还是文本格式,本文主要是基于这个格式来讲解的。

    首先是文件头,大部分文件都是靠文件头来区分文件格式的吧,Umd也不例外,Umd的文件头是0xde9a9b89,写到文件上前四位分别应该是0x89,0x9b,0x9a,0xde,这个大家理解起来应该没什么问题吧,以下的类似。

    然后第5个字节是0x23,也就是字符’#’,这个字符在Umd中被用来作为功能块的分割符。

    接下来有4个字节是固定字节0x01,0x00,0x00,0x08,其具体意义不明。

    然后是第10个字节了吧,第10个字节是决定Umd是文本还是漫画的,0x01表示是文本,0x02表示是漫画。

    然后是2个字节的随机数。

    随机数完了之后,就到了Umd的一些基本属性了,例如标题,作者等。这些属性是用同样的格式生成的,格式如下:
    分割符’#’:1字节
    属性类别:2字节,其中类别包括以下几类(标题--0x02,作者--0x03,年--0x04,月--0x05,日--0x06,小说类型--0x07,出版商--0x08,零售商--0x09
    0x00:1字节
    内容长度:1字节,长度也很特别,并不是直接取字符数,而是字符数*2+5,例如字符串”hello”,则长度是5*2+5=15
    内容:n字节,要写入的内容是经过Unicode编码的,现在明白上面的长度为什么要乘2了吧。

    好了,基本属性完成之后,就开始正文内容了。

    首先还是分割符’#’,然后是2个字节0x0b,表示下个部分是用来记录内容长度的,(细心的读者应该已经发现了,在分割符’#’后面跟的都是数据类型,本文在最后会给大家总结一下现在已知的数据类型)。接下来是两个字节0x0900,然后是4个字节的内容长度(内容长度为各章正文长度之和)。

    长度完了之后就到了章节偏移量,分割符’#’,数据类型2个字节0x83,然后是2个字节的0x0901,接下来会有4个字节的随机数,接下来一个字节0x24,然后又是4个字节的随机数,这个随机数要和上一个随机数相同,要不然生成的Umd在某些解析器下不能通过校验。接下来的4个字节和章节的数目有关,字节内容是(章节数目*4)+9,假如小说有两章,那就是17,然后,就是每章的偏移量,每个占4个字节,第一章偏移当然是0啦,第二章的偏移是第一章的正文长度*2(因为是Unicode编码)。以此类推。

    好,接下来的数据类型是章节标题,还是’#’然后接2个字节数据类型0x84,两个字节0x0901,4字节随机数,0x24,4字节随机数(需一致),然后是4字节和小说总标题长度有关,字节内容是(章节1标题长度*2 + 1) + (章节2标题长度*2+1)+…+9;然后就是写每章标题的内容了,按如下格式写:首先1个字节,内容章节标题长度*2,接下来章节标题长度*2个字节,内容是章节长度的Unicode编码。

    标题写完了之后,就要开始写正文了。注意,正文不是按章节来写的,而是先把所有章节的正文凑成一个长字符串,然后分成n个数据块来写入,并且每个数据块都使用Zlib进行压缩,建议每个数据块按固定大小来分,而且Umd貌似有最大数据块大小的限制,超过了,解析的时候会有问题,建议数据块大小32768字节。下面说明如何写数据块,第一个字节是0x24(注意,不是’#’),然后是4个字节随机数,然后是4个字节,内容是压缩后数据块长度+9,然后就把压缩后数据块写入就完成了一个数据块的写入,在写完每个数据块后,可以选择做如下两件事的一件或两件(建议用随机数来决定):
    1.  写入1个字节’#’,2个字节的0xf1,2个字节的0x1500,16个字节的0x0
    2.  写入1个字节’#’,2个字节的0x0a,2个字节的0x0900,4个字节的随机数

    在所有正文数据块写入完毕后,写入1个字节’#’,2个字节数据类型0x81,表示正文写入完毕,2个字节0x0901,4个字节随机数,1个字节0x24,4个字节随机数(一致),接下来是4个字节,内容是数据块的数目*4+9,然后,还记得每个数据块写入前都生成了4个字节的随机数吗,从最后一个开始,倒序写如这些随机数,每个4个字节,结束正文的写入。

    接下来是封面,1个字节的’#’,2个字节的数据类型0x82,3个字节0x010a01,4个字节的随机数,1个字节的0x24,4个字节的随机数,4个字节的数据和封面字节数有关,内容是封面字节数+9,然后再写入封面字节数据,不需要压缩。

    到此为止,主要数据都写完了,但我发现有些Umd生成工具还会生成一些数据类型是0x87的,这一块具体功能还不是非常清楚,大概是生成一些数据来通知Umd解析器应该使用什么样的PageOffset来显示内容,具我测试,这部分不写入也能正常解析,对这部分有兴趣的朋友,可以参考我提供的代码。

    该结束了,1个字节的’#’,2个字节的数据类型0x0c表示文件结束,2个字节的0x0901,4个字节的文件长度+4,完成了。

    附,数据类型表:

    0x01--文件开始

    0x02--标题

    0x03--作者

    0x04--年

    0x05--月

    0x06--日

    0x07--小说类型

    0x08--出版商

    0x09--零售商

    0x0b--内容长度

    0x83--章节偏移

    0x84--章节标题,正文

    0x81--正文写入完毕

    0x82--封面

    0x87--PageOffset

    0x0c--文件结束


    写了一大堆,写完之后才发现像流水帐,看来和电脑用长了文字功底都还老师了,不过应该还是能看明白的^_^。

    本文是原创文章,欢迎转载,转载请带上以下信息,也欢迎研究过这方面的朋友和我交流,Umd还有很多不明白的数据类型等着我们去研究:

    作者:    王毅

    QQ  :     13494612

    Email:    wangyi@shoujihw.com

    原贴地址:  http://www.shoujihw.com/html/article/111.html

1
0
分享到:
评论

相关推荐

    UMD格式文件解析(for VC)

    UMD(Universal Media Disc)格式最初是为PlayStation Portable(PSP...以上就是关于“UMD格式文件解析(for VC)”这一主题中的主要知识点,涵盖了从文件格式理解、编程环境、第三方库使用到软件工程实践的多个方面。

    UMD炮手,UMD文件制作工具

    UMD(Universal Mobile Disk)格式是一种早期流行于掌上设备,如PSP(PlayStation Portable)上的文件格式,它能够将多媒体内容打包成一个单一的文件,便于在移动设备上浏览和存储。 UMD格式的诞生,主要是为了适应...

    UMD格式电子书制作 UMD炮手

    5. **阅读UMD**:在手机上安装支持UMD格式的阅读器,如掌阅iReader、Mobipocket Reader等,打开UMD文件即可开始阅读。这些阅读器通常具有书签、夜间模式、自动翻页等功能,提供舒适的阅读环境。 关于UMD格式的阅读...

    java版本的umd文件解析器

    本项目是基于Java实现的UMD文件解析器和编码器,专注于处理文本格式的UMD模块。 1. **UMD格式** UMD是一种模块格式,它允许JavaScript代码在多种环境(如浏览器的全局作用域、RequireJS等AMD环境、Node.js的...

    一个umd文件的解码类

    这种模式通常用于JavaScript开发,但这里提到的是C#版的UMD文件解码类,这表明它可能是为了解析或处理特定格式的UMD数据。 `UMDFile.cs`:这个文件很可能包含了UMD文件的核心解码逻辑。在C#中,它可能是一个类,...

    掌上书院UMD与TXT格式转换工具

    这款工具简化了文件格式互换的过程,使得在不同设备或阅读软件间分享和阅读电子书更为便捷。 UMD格式是由掌上书院推出的一种专有格式,它包含书籍内容、元数据、封面图像等,旨在提供一种整合的阅读体验。然而,UMD...

    UMD炮手—umd文件查看和修改

    方便查看和修改UMD文件的工具 支持以下功能: 1. 直接读取UMD格式电子书,允许编辑后保存。 2. 支持章节的合并,添加,删除,排序。 3. 支持编辑作者,发布日期,类别等。 4, 支持一次合并多个UMD文件。 5. 支持一次...

    umd 电子书格式解析器源代码

    解析 umd 格式电子书, 可以自动转换 txt 文件到 umd 格式电子书格式

    UMD转换工具

    UMD转换工具是用来帮助开发者将非UMD格式的JavaScript代码转换为UMD格式的工具。这种转换对于那些想要使他们的代码在各种模块加载器如RequireJS、SystemJS或者在浏览器全局作用域下直接执行的项目中兼容是非常有用的...

    umd阅读格式解析编辑器

    总的来说,UMD阅读格式解析编辑器通过集成ICSharpCode.SharpZipLib库实现了对UMD文件的读取和编辑,其核心程序XBookMaker.exe提供了用户友好的界面和丰富的功能。配合使用说明和额外的资源,用户可以高效地管理和...

    umd转换TXT格式

    转换UMD格式到TXT格式,意味着将包含UMD结构的JavaScript文件转换为纯文本文件,这可能对阅读、分析或存储JavaScript源代码有帮助。 在JavaScript世界中,UMD是一种智能解决方案,它检测加载环境,并自动选择最适合...

    UMD文本编辑器 v2.7源码20121024

    该工具可以打开umd格式文本文件进行编辑保存,支持新建umd格式文件,支持umd转txt文本文件,也可以把txt文本文件快速转成umd文件。 工具自动关联.umd扩展名。提供比处理命令注册右键菜单,支持不打开工具即可完成...

    UMD TXT互转 电子书格式互转

    4. 对于包含复杂格式的UMD文件,转换后的TXT文件可能无法完全保留原有格式,此时需要在支持UMD的设备上阅读以获得完整体验。 总之,UMD和TXT是两种不同特性的电子书格式,选择哪种取决于个人需求和设备支持。通过...

    电子书UMD格式制作工具 炮手2.0

    - `ICSharpCode.SharpZipLib.dll`:这是一个.NET库,用于处理压缩和解压缩操作,如ZIP格式,炮手2.0可能依赖它来打包UMD文件。 - `UMD 炮手.exe`:这是炮手2.0的可执行程序,用户运行这个文件来启动软件并制作UMD...

    umd、html、jar、pdf、pdb、rtf、hlp、pdb、chm电子书格式万能转换器

    7. HLP(Help File):Windows的帮助文件格式,通常用于软件的用户手册或帮助文档。虽然不是典型的电子书格式,但通过转换工具,HLP文件也可以被转化为更通用的电子书格式供阅读。 8. CHM(Compiled Help Manual)...

    手机编成 umd格式

    4, 支持一次合并多个UMD文件。 5. 支持一次合并多个文本文件。 6. 支持更换封面,不限制封面图片的大小(自动压缩,可能压缩后的图片会有些失真)。 7. 支持内容查找,不区分大小写。 8. 支持漫画格式浏览、修改、...

    umd格式手机阅读器pc版

    2. **多媒体集成**:UMD文件不仅包含纯文本,还可以包含图片、音频、动画等,提升了阅读的互动性和趣味性。 3. **压缩性**:由于UMD文件是经过压缩的,因此它们在存储和传输时占用较少的空间,适合手机有限的存储...

    UMD 炮手、UMD 、 炮手

    UMD文件本身不是一种常见的文件格式,但在JavaScript开发中,UMD格式的JavaScript库或模块可以在不同的模块系统和非模块化环境中运行。因此,如果你有一个UMD格式的JavaScript文件,你可能需要一个文本编辑器或者...

    JAR和UMD格式电子书阅读器

    UMD文件不仅包含了书籍内容,还可能包含元数据和版权保护信息。这种格式旨在提供一种简便的方式来分发和阅读电子书,特别适合那些内存有限且处理器能力较弱的设备。 FKreader.exe很可能是这个电子书阅读器的应用...

Global site tag (gtag.js) - Google Analytics