浅谈Umd文件格式
2009-09-10 00:00:00 来源:WEB开发网长度完了之后就到了章节偏移量,分割符’#’,数据类型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
更多精彩
赞助商链接