zoukankan      html  css  js  c++  java
  • 生成飞库jar手机电子小说ByC# dotNET界面

    …………这是我博客园的第一章处女作。我讨厌只会转载没有原创的东西,因此我的博客园开博到现在一直没有发布什么东西。主要是自己心里没有特别的感受。下面有点小小的心得因此,写出来和大家分享。

          很多喜欢看手机小说的人都应该知道jar这样一种 电子小说格式。并且非常多的人都在使用这样的电子小说格式进行阅读。飞库网就是提供这样服务的一个网站,我非常喜欢他上面的jar,而且ta应该属于行业里面比较早的一批生成手机小说的站点。jar是一种java的发布程序,但是我观看了飞库网的站,纯粹的dotnet网站当然我们不能够否认ta有可能在后台采用java进行生成jar小说。难道C#真的无法生成这样的小说?作为一个程序学习我想我可以去试试。

          查阅了很多资料,百度了很多东西。其中joymo的站长在他的博客园中给我的启示最大,但是一直没有事例代码,而且有些细节没有说的非常清楚,所以我决定自己写一份完整点的关于C# 生成jar手机小说的博文。小弟的文笔不好,讲解的很有可能不是非常清楚,我只希望能够给大家带来一次清晰的感觉。不要喷我就好。我采用的模版就是飞库自己的那个jar小说模版。在我将前面的分析讲解完毕后,我将把代码贴出来给大家参考一下叽歪完了。

    一、生成jar基本方法

          C#是没法打包生成jar文件的。(博主你脑袋有问题啊?刚才还说可以)呵呵,这是一个基本的常识嘛,两个平台都不一样如何生成另一个平台的东东?这里有个C#调用jar类的博文大家可以看看(汗了 翻遍了自己的收藏夹都没找到 晕死 我先找找看 找到发上去)。因此我们这里说的生成,严格意义上来说只是一种替换而非真的用C#生成jar。

          jar它的本质其实就是zip,所以我们把jar手机电子书的小说内容替换掉后再用压缩文件压缩为jar就可以了。这也就是用C#生成jar的方法。其实在小白之前已经有很多的人实现了。只是一直没人公布出其中的相关实现细节。所以这成了一个技术秘密一般。比如说飞库,里面的电子书就是用dotNet后台自动生成的。小白生成的jar在本人的索爱z550中顺利安装阅读,MIDP2.0 java手机。在塞班的操作系统中由于小弟的 条件限制没法进行测试,但是我相信应该没问题。jar的生成其实还是非常简单的,首先用zip 或者winrar解压掉jar 然后把里面的文本信息按照一定的格式进行替换和添加就行了。至于最开始的jar的实现肯定是用java环境下编译的,然而今天我们要讨论的是如何用C#语言实现 自己创建相应的小说jar。废话说了那么多,只是要把整个过程说明一下,其实我走的弯路还是很多的,好了正文马上开始。
    关于jar小说文件格式的说明。
    我喜欢去飞库下小说,所以我最开始研究的就是飞库的小说jar
    当我们解压掉小说jar文件后获得下面的一些文件信息。我们要着手就是研究这些文件的文件格式,以及他们表示的意义这样我们就可以用任何语言 按照一定的文件格式生成再打包成jar文件就可以了。



          在这个文件图里面,大家看到有一个META-INF文件夹,里面存储的是头信息,可以直接用Txt文本打开 就可以看到里面具体的情况,还有0-109没有文件扩展名的文件,其实这就是我们要研究处理的最主要的部分,关于a.class……等还有图片这是属于,一些程序文件(暂时这样理解,因为jar文件真正能在手机的java环境下运行,这个起了非常大的作用)这个任何的小说文件都一样因此,我们直接把他作为以后生成的模版就ok了。下面我将分成3部分进行解析整个jar文件格式
    一、META-INF中的MANIFEST.MF
    这是整个分析中比较简单的,可以直接使用 记事本就可以打开不需要额外的解析
    打开文本将会看到如下信息
    Manifest-Version: 1.0
    MicroEdition-Configuration: CLDC-1.0
    MIDlet-Name: 斗罗大陆_512_4
    Created-By: 1.4.2_09 (Sun Microsystems Inc.)
    MIDlet-Vendor: FeiKu.com
    MIDlet-1: 斗罗大陆_512_4, /0.png, MBook
    MIDlet-Version: 1.0
    MicroEdition-Profile: MIDP-1.0

    我们只需要了解到其中我加红的信息就可以了。因为其他的信息我们没法改变毕竟 程序在java生成的时候就已经确定,我们无法改变。在红色的字中,我们可以非常清晰的知道,这里面包含了书名,创建者,还有文件信息 里面有一个0.png表示的是在 jar生成后在 手机中显示的一个图标 对应在模版中的0.png图片文件。至此我们分析这个文件就ok了。在我们生成jar小说的时候替换掉这些就ok了
    二、关于数字文件中的格式(1)(重点我分2部分讲)
    在数字文件中,除了0这个文件以外其他的文件都可以非常清晰的知道他,首先你用word将文本导入,更改掉他的文本编码为Unicode注意不是UTF8这点很重要,如果用utf-8会出错的
    三、关于数字文件中的格式(2)(真正具备技术含量的地方出现了)
    首先我们用VS打开0这个文件当然如果你有其他的winhex也是可以的
    看到下面的图,也就是用vs打开 0文件后得到的文件格式,非常重要的格式如果没有分析清楚生成的jar文件是无法正常打开的,0的这个文件就像是一个索引目录文件它标志着整个jar小说文件中 小说章节的关联。
    看到图片中的 用红色框起来的部分,这是我们研究整个格式的关键所在。
    1、看到前三个字节里面,有0x00 0x01,0x30。这是jar文件的格式标头。我们记住就行了也就是在生产0这个文件中 首先要把标头设计为0x00 0x01 0x30 这是规定无为什么
    2、接下来我们看第二部分0x00,0x0c两个字节这是表示的是12然后不管接下来读12个字节看看发现包括的就是151136_512_4对应一下发现原来这是 整个jar文件的 文件名,因此我们明白了在头部 首先用2个字节输入整个文件名的长度,注意是2个字节的。然后就是整个“151136_512_4”整个字符串的bytes数组写入也就ok了我们就把头部文件信息,我们继续读下去,这需要很大的耐心,同时需要解压多个jar文件进行对比分析,才能够找到其中的关键,
    接下来我们继续分析。


    3、我们再读两个字节,0x00,0x03 这两个字节是3,我们再读3个字节看看到底是什么,原来是109 对比(右边的ANSI)就是109的字符串形式。我们看看这个字符串到底是什么意思,我们发现在整个的jar文件中共有109个文件,最开始的时候我们说了,这些文件中表示的是整个 小说中文件的信息。这有可能表示的是整个文件中表示整个小说章节数的
    4、我们继续再读两个字节,0x00,0x6c这两个字节我们读108个字节看看是什么东西。我们是看不出来到底是什么东西的,主要原因是我们没有更改编码格式,用word打开编码改为UTF-8然后会知道这居然是整个小说的目录部分这里表示的是整个目录的标题部分。这样我们已经完成了最主要信息的解析(中间分析很痛苦的呵呵) 
    5、在尾部的信息我们看哈,下面的图哈。在那看到了又512_4到最后的标题。根据前面我们分析的经验,在文本前面肯定有一个信息是标注整个后面内容大小的字节,我们还是按照两个字节来寻找一下。
    最后在查找的时候还是用winhex的方法

    在winhex中比较容易看出来 字符集是UTF-8 很明显的看出来如果是2个字节肯定不行那么我们变成4个字节试试看活的正确了

    至此整个文件格式的分析就完成了。下面就是如何使用C#代码去构建整个文件了。下次我在讲。这个的实现具备有非常大的现实意义,如果你想做一个手机小说站 对能够后台实现生产对应的jar文件相当有作用 后面在搞下umd格式和chm 希望能够把整个小说能够存在的载体都用C#实现一次。后面几个相信难度没那么高。总结一下
    在我们使用的
    头部信息:0x00,0x01,0x30,
    然后是2字节的书名长度:
    书名字符串
    2字节:书的章节数也就是对应有多少个数字的文件(最开始的那张图)数量的长度大小
    长度的字符串形式
    2字节:表示的是标题的长度第一章
    紧跟着标题,注意编码格式是utf-8
    然后是第二章
    第二章的标题 也是utf-8 的格式
    然后第三章
    …………
    最后关于书的基本信息
    4个字节:表示关于书的信息整个长度
    然后紧跟着是书的字符串支持\r\n表示换行
    至此整个 文件格式的分析就完成了 好痛苦了 呵呵不过还不错啦下次弄出在C#中实现的 一些细节难点

  • 相关阅读:
    PHP函数篇详解十进制、二进制、八进制和十六进制转换函数说明
    TP5安装workerman版本的坑
    下载git2.2.1并将git添加到环境变量中
    RedHat安装git报错 expected specifier-qualifier-list before ‘z_stream’
    Git出现fatal: Unable to find remote helper for 'https'
    ThinkPHP5实现定时任务
    php一行代码获取本周一,本周日,上周一,上周日,本月一日,本月最后一日,上月一日,上月最后一日日期
    git 查看日志记录
    程序员必读之软件架构 读书笔记
    centos7 安装桌面
  • 原文地址:https://www.cnblogs.com/jasondun/p/1518934.html
Copyright © 2011-2022 走看看