初衷
闲着慌 + 6.1k 本书~
测试样例
设计过程
图标都一样,名字全是 id
前面塞个 jpeg 当缩略图

zip 包纯文本什么都看不到~
加个 meta
json 直接读略麻烦,好像只有 img 来着
来换个 md !可读性 max

webp 压缩效果不错~但是不支持怎么办~如果不要图怎么办~
好加个拓展包

啊~原 zip 包没法解了
基于 gzip 重写解压工具
看看File 格式
来个魔法数 就 knv 吧~ 233
假如升级怎么办加个版本
大概要个 UUID 做拓展包
CRC-32 校验保留吧~
然后就出来这个鬼~~
原数据
.
├── cover
├── data
│ ├── 19925.json
│ └── 20037.json
├── image
│ ├── 01468b6d85803b47f52f0a2a62978754
│ ├── 135d8742fbf16d580ce65c6c518787b0
│ └── febb215a2552db7918830dca52d4326c
└── information
├── book.json
├── chapters.json
└── volume.json
3 directories, 32 files
Format
Byte Order: Little-endian
Offset Lnegth Contents
0 3 bytes magic header `knv`
3 2 bytes Major version
5 4 bytes UUID
9 2 bytes Length of Meta(a)
9 4 bytes Length of Data(b)
13 (a) byte Meta(plain text,eg:"id,title,subtitle,description,author,press,source",'\0' terminated)
13+a 4 bytes CRC-32
17+a 2 byte 0x02 (STX)
21+a (b) byte Data(bytes,compressed data)
21+a+b 2 byte 0x03 (ETX)
23+a+b (b) byte Extension Block(bytes,compressed data)
Meta Block
包含可直接浏览的纯文本描述
eg:
{
"bookid": 109,
"volumeid":2576,
"title": "狼与香辛料",
"subtitle": "第 14 卷",
"author": "支仓冻砂",
"intro": "芙兰答应帮罗伦......卷中重新登场!",
"press": "电击文库",
"source": "http://xxx.xx/xx"
}
Content Block
序列化数据(使用 JSON/FlatBuffers )
压缩:可选
[{
"C": "3d4caaf680dfde29a849a467d181c484",
"T": 1
}, {
"C": "有话要说——被这么叫进房间的罗伦斯刚一推开房门就不禁为眼前的这片光景屏住了呼吸。",
"T": 0
}, {
"C": "实在是太美了。",
"T": 0
}]
Extension Block
压缩过的可替换数据
如:图片的 jpeg 和 webp 版本