纯文字版
1.关于mobi正文分块
https://wiki.mobileread.com/wiki/PDB#Palm_Database_Format
mobi正文分了若干块正文块的信息在文章开头偏移78个字节的位置
2.关于mobi头文件
字段位置都要加上 正文分块信息的偏移
详情见:https://wiki.mobileread.com/wiki/MOBI#Format
我们现在只关注需要的信息:判断mobi是否为一本词典的标志为字段96和100,判断是否有索引为60 metaOrthIndex
和64
3.关于词典索引
词典有多个个索引区,metaOrthIndex为索引区的开始位置,每个区解压后最多为65536个字节,索引区有 idex判断该区是否是索引区,第一个索引区一般比较小,包含的信息有索引块的总个数,索引可能用到的公共字符count索引的个数,hordt1公共字符块,每个索引都占8个字节前四个字节索引内容所在的位置startpos,后四字节索引在正文所在的位置endpos。索引内容是连续的并且为有序的,排序方式为去掉标点符号和数字后并且大写转小写后得到的usc-2对应的顺序
4.关于查词
由于词典索引是有序的,查词的为二分查询效率最佳,先查每个区的头一个索引确定是哪个区,再在区内进行查询;查询正文是由于每个块在解压后固定长度或者是记录好的长度,这样先确定是哪个块数据再解压得到索引的正文。
c++解析代码版:https://blog.csdn.net/wing_yue/article/details/87713189