V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
这是一个专门讨论 idea 的地方。

每个人的时间,资源是有限的,有的时候你或许能够想到很多 idea,但是由于现实的限制,却并不是所有的 idea 都能够成为现实。

那这个时候,不妨可以把那些 idea 分享出来,启发别人。
dphdjy
V2EX  ›  奇思妙想

一种轻量的轻小说文件格式~~

  •  
  •   dphdjy · 2016-02-11 11:29:41 +08:00 via Android · 5542 次点击
    这是一个创建于 3186 天前的主题,其中的信息可能已经有所发展或是发生改变。
    魔法数(2 bytes)
    主版本
    元数据区块
    - 唯一 ID
    - 标题
    - 作者
    - 发行
    - 来源
    - ...
    数据区块
    - 唯一 ID
    - 解析方法
    - flag
    - CRC32 校验
    - 数据(protobuf)
    -- 类型(默认=TEXT/1 可省略)
    -- 内容(string/bytes/link)
    拓展区块(类 gzip)

    可拆分~重组

    前面直接插入 jpeg _(:з)∠)_ 还能当封面~2333

    以上纯属 娱乐~ 欢迎来黑~
    第 1 条附言  ·  2016-02-12 10:32:16 +08:00
    _(:з)∠)_ 这轮子我不造了~2333
    第 2 条附言  ·  2016-02-12 16:10:47 +08:00

    初衷

    闲着慌 + 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"
    }

    m  狼与香辛料"支仓冻砂*电击文库...
    

    Content Block

    序列化数据(使用 JSON/FlatBuffers )

    压缩:可选

    [{
        "C": "3d4caaf680dfde29a849a467d181c484",
        "T": 1
    }, {
        "C": "有话要说——被这么叫进房间的罗伦斯刚一推开房门就不禁为眼前的这片光景屏住了呼吸。",
        "T": 0
    }, {
        "C": "实在是太美了。",
        "T": 0
    }]
    

    Extension Block

    压缩过的可替换数据

    如:图片的 jpeg 和 webp 版本

    42 条回复    2016-02-12 20:15:40 +08:00
    love
        1
    love  
       2016-02-11 12:28:14 +08:00
    自已瞎搞的二进制的不好调试,何不随大流用 zip 格式打包的 xml 及相关文件
    Strikeactor
        2
    Strikeactor  
       2016-02-11 12:30:55 +08:00
    各平台没有相关客户端实现的话,拿这玩意打包了要咋看
    vcfghtyjc
        3
    vcfghtyjc  
       2016-02-11 12:39:02 +08:00
    格式这种东西,说到底还是看支持的平台多不多。
    9hills
        4
    9hills  
       2016-02-11 12:50:12 +08:00 via iPad
    为啥不用 epub
    dphdjy
        5
    dphdjy  
    OP
       2016-02-11 12:57:39 +08:00 via Android
    @love 因为之前就是 json 的 zip 包~ 出自娱乐准备全部二进制~2333
    dphdjy
        6
    dphdjy  
    OP
       2016-02-11 12:58:08 +08:00 via Android
    @Strikeactor 这个不是问题~除了 iOS~相关库可以轻易写出来~233
    dphdjy
        7
    dphdjy  
    OP
       2016-02-11 12:59:37 +08:00 via Android
    @9hills 那几千本轻小说没有用上 epub 的特性就是 txt+jpeg~用 epub 在制作~储存~解析方面产生的浪费~
    简言之:杀鸡焉用牛刀
    Quaintjade
        8
    Quaintjade  
       2016-02-11 13:18:15 +08:00 via Android
    @dphdjy
    epub 还是 txt+jpeg 就好,别想着搞什么特效。
    以前试过一些号称制作精美的 epub 电子书,结果几乎每个 epub 阅读器的显示效果都不一致,其中至少一半根本就是页面布局崩了。
    dphdjy
        9
    dphdjy  
    OP
       2016-02-11 14:00:07 +08:00 via Android
    @Quaintjade 对!因为标准复杂~每个实现差异太大~反之浪费 epub 的特性远不如 txt+jpeg

    所以才想做一个轻量高效的格式~

    刚开始准备 zip 打包进 markdown+jpeg

    后来发现可能只要用 4 种格式~
    还是比较麻烦~遂沿用之前的部分东西变成二进制

    元数据明文保存
    数据区块 可明文 /压缩
    拓展区块 可压缩
    区块可分离~
    元数据区块维护 hash 表外链~
    msg7086
        10
    msg7086  
       2016-02-11 16:15:34 +08:00 via Android
    为了节约几个时钟周期或者几个字节去重新造轮子才叫牛刀。别说 ios ,你先研究下怎么让你的书在 kindle 上看。
    dphdjy
        11
    dphdjy  
    OP
       2016-02-11 16:29:47 +08:00 via Android
    @msg7086 _(:з)∠)_ 没考虑这类平台~ 2333

    以及主要为了娱乐~233
    loading
        12
    loading  
       2016-02-11 18:35:19 +08:00 via Android
    对于小说正文的内容来说,附加信息也就那么一点,还不如直接 json
    FFLY
        13
    FFLY  
       2016-02-11 19:35:47 +08:00
    话说很久以前也想自己造个轮子, PC+移动,全平台,后来发现就算造出来了,还要把那么多轻小说都转格式,否则就是自娱自乐,再看看工作量,果断放弃。
    dphdjy
        14
    dphdjy  
    OP
       2016-02-11 19:40:24 +08:00 via Android
    @FFLY 二代目转码已经完成过半~ 有之前用到的 6k+ 的书~

    现在想做个比较有意思的格式~

    看看什么地方设计有问题再改改~
    FFLY
        15
    FFLY  
       2016-02-11 19:44:45 +08:00
    @dphdjy 我是有时候忍不住想要造轮子,之前还想造个看漫画的轮子,但是拖延症发作,那真是什么都是浮云啊。
    shyling
        16
    shyling  
       2016-02-11 19:56:21 +08:00
    我需要一个目录
    pynix
        17
    pynix  
       2016-02-11 19:58:01 +08:00
    新轮子
    dphdjy
        18
    dphdjy  
    OP
       2016-02-11 20:19:30 +08:00 via Android
    @shyling 什么目录~哪种层级的?系列-分卷-章节
    dphdjy
        19
    dphdjy  
    OP
       2016-02-11 20:20:23 +08:00 via Android
    @pynix _(:з)∠)_ 因为能力有限~只能造点轮子啦~

    如果有什么有意思哒~不是轮子务必告诉我~ 2333
    dphdjy
        20
    dphdjy  
    OP
       2016-02-11 20:22:16 +08:00 via Android
    @FFLY 因为群里面小伙伴一直各种求新 APP~ 遂准备再来一次企划~

    以及 wenku8 APP 作者的 prpr 阅读器都开发那么久了~

    就是酱紫~

    (还有就是数据放哪然并卵~总要干点什么~)
    Earthman
        21
    Earthman  
       2016-02-11 20:25:16 +08:00
    @msg7086 有时候库函数占用很大空间和时间,还真会自己去造轮子。。。。
    dphdjy
        22
    dphdjy  
    OP
       2016-02-11 20:29:58 +08:00 via Android
    @Earthman 比如~前年为了开发某国内小说平台的 android APP 原始数据 txt~我硬是写了 epub 转化+fb 精简版+UI 适配~然后主要放在适配上用了 2 个月

    现在看来那时候完全没必要用上这些东西~自己造轮子 一周大概就可以了~那样编写核心问题就在 Android 显示上,也不用后期花几倍时间精简 fb 的各种模块 最后 APP 完成是 2MB 左右来着~
    pynix
        23
    pynix  
       2016-02-11 21:12:50 +08:00
    @dphdjy 。。
    yonglanyouyou
        24
    yonglanyouyou  
       2016-02-12 10:08:47 +08:00
    诺基亚时代有一种流行的小说文本图片打包格式叫做 umd
    fy
        25
    fy  
       2016-02-12 11:39:51 +08:00
    LZ , json 啊。文本格式本身在扩展方面有巨大优势,而且别人根本不用费力读你的二进制文档就能生成出差不多的书,同时能将信息丢失的影响减小到最小。

    meta 信息首尾各一单行 json 来描述,正文爱用什么用什么, markdown 在段落上丢失信息太多,并不适合电子书。

    还不如只是加上一个对图片、加粗、斜体等等简单排版的支持(而且也不是不能扩展)。
    dphdjy
        26
    dphdjy  
    OP
       2016-02-12 11:49:23 +08:00 via Android
    @fy 现在就是 json 唷~
    结构如下:
    zip 壳
    - data
    -- x.json
    - img
    -- x
    - info
    -- book.json
    -- vol.json
    -- chap.json
    - cover

    _(:з)∠)_ 感觉做出新格式多好玩 23333

    以及粗略统计轻小说的内容格式很单一

    md 完全可以胜任

    不考虑其他问题,只关注这种格式的需要优化的问题

    PS:目前用二进制压玩和 zip 基本没体积优势 2333
    fy
        27
    fy  
       2016-02-12 12:35:41 +08:00
    @dphdjy 你全文 json 不行的, json 又不能按流来读,假设小说有 10MB 就要全读入内存
    fy
        28
    fy  
       2016-02-12 12:38:27 +08:00
    @dphdjy markdown 你试试这种文本:

    1
    2
    3

    4 5 6




    7

    再比如写信的格式

    OOXX :

    XXXXXXXXXXXXXXXXXXXXXXXX.
    XXXXXXXXXXXXXX:
    OOOOOO
    OOOOOOO
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    OOXX
    OOXXOOXXOOX


    能正确显示才有鬼了
    fy
        29
    fy  
       2016-02-12 12:41:06 +08:00
    尼玛,空格都被吃了

    dphdjy
        30
    dphdjy  
    OP
       2016-02-12 13:13:15 +08:00 via Android
    @fy 来个源文件给你~

    http://pan.baidu.com/share/link?shareid=3288077794&uk=655169298

    其中 json 是分段储存~

    以及上面那
    12 什么的(ಥ_ಥ) 那是什么鬼~
    不过可以用 pre 框起来~

    下面的信~这格式好谜~
    这个只有更高等的语法才能表示 233
    (如果不表意 pre 依然可以~)

    不过这边的原文并没有用到~~

    我并不准备做一个 epub 类的万能文档格式~
    只是做个轻小说的而已~
    ipconfiger
        31
    ipconfiger  
       2016-02-12 13:24:08 +08:00
    这个轮子造起来既没有实用性也没有技术含量, 有神码意义? 小说本来就是文本, 你用什么二进制的 meta 根本省不到几个 byte, 简直就是脱了裤子放屁, 还不如老老实实用文本的, 实在要节约体积 zip 一下就好了. 发明什么的好歹要以理论为基础用实践为准绳, 这种民科似的发明创造实在是不可取的

    ps: 一再强调轻小说什么的, 那是个什么贵, 比重小说要高级?
    dphdjy
        32
    dphdjy  
    OP
       2016-02-12 13:25:22 +08:00 via Android
    fy
        33
    fy  
       2016-02-12 13:34:52 +08:00
    @dphdjy 好像并没有完全领会意思……
    dphdjy
        34
    dphdjy  
    OP
       2016-02-12 13:55:52 +08:00 via Android
    @ipconfiger 关于强调轻小说只是都和 epub 比较

    小说是纯文本
    文档可以包含各种插入内容,更佳复杂的排版信息

    但是轻小说主要就是纯文本+插图
    本身就是 txt+jpeg
    一般也就是 zip 加个壳

    至于上面的二进制什么的~其实只是对 txt 和 jpeg 部分的压缩

    meta 是因为压缩之后不可读而已,还有拓展区块的 link
    比如对于图片储存什么的可以对整体压缩打包~

    我再去加个附言说明
    dphdjy
        35
    dphdjy  
    OP
       2016-02-12 13:56:25 +08:00 via Android
    @fy 好像没有~QAQ
    dong3580
        36
    dong3580  
       2016-02-12 15:41:43 +08:00 via Android
    @fy
    还是把 umd 里面文本抽出来,放文件夹 txt ,还是 txt 爽
    dphdjy
        37
    dphdjy  
    OP
       2016-02-12 16:13:15 +08:00
    @fy @ipconfiger @9hills @love @loading @Quaintjade @FFLY 稍微详细的说了一下~~~ QAQ
    dphdjy
        38
    dphdjy  
    OP
       2016-02-12 16:52:19 +08:00
    @dong3580 md 更爽~!!

    txt:

    虽然这话自己听着都刺耳,可赫萝却平静地回答道。

    “要是和人谈起赚钱的事情,咱的利益不就减少了呗?”

    如果她不是露出恶作剧般的笑容这样说的话,罗伦斯也许连苦笑着接受那话都很困难。

    赫萝起身,轻轻伸个懒腰动了动耳朵。

    “不可以太过亲近。”这是他们彼此间心照不宣的重要事项。

    可是在注意那件事时事情不但向相反的方向发展了,罗伦斯甚至还曾抛开过那重要事项。

    即使是赫萝,在漫长到也许接近永远的旅途中,也绝对不止一次两次踢飞过挡路的大石头。

    就算那样,也不能因此改变现实。

    赫萝把柯尔比作“使自己保持贤狼的重石”,应该不是夸张的表现。

    拿柯尔捉弄罗伦斯除了事情本身很有趣以外,大概也包含自卫的意味在内吧。

    为了不越过那条线。

    为了将明明明白却无计可施的事情蒙混过去。

    将那焦躁作为最低限度的借口。

    md:
    FFLY
        39
    FFLY  
       2016-02-12 19:18:22 +08:00
    @dphdjy 我说说我之前的想法,首先为了实现跨平台和在线阅读,我把图片和文本做了分别的封包。然后通过标识符和语法,实现简单的排版和图片占位。

    123.data - 主封包,包含文本和图片。
    123.th.data - 预览用封包,包含小说简介和封面。

    之前就是计划这样分开做,还蛋疼的写了个简单校验和加密,后来就没有然后了。
    dphdjy
        40
    dphdjy  
    OP
       2016-02-12 20:01:16 +08:00 via Android
    @FFLY (⊙o⊙)哦~和我差不多~来大干一场吧~我准备写一条工具链~

    爬虫
    - 轻之文库(已完成,然而挂了
    - wenku8(完成
    - 贴吧(开发中
    - 轻国论坛(开发中

    转码
    - epub2 ,开发中
    - txt2 ,完成
    - iQing2 ,完成
    - md2 ,完成

    已有数据
    - 网上流传 6g
    - iQing 截止 9 月 10g

    然后不知道还有啥~2333
    FFLY
        41
    FFLY  
       2016-02-12 20:12:59 +08:00
    @dphdjy 其实关键还是做出来不好上线,自己用造个轮子没意义。但是真的上线推了,版权纠纷立马就到,所以我后来也就懒得折腾了。
    dphdjy
        42
    dphdjy  
    OP
       2016-02-12 20:15:40 +08:00
    @FFLY 原来是有上线之类的想法~~

    我只是折腾的玩...
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   993 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 20:26 · PVG 04:26 · LAX 13:26 · JFK 16:26
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.