基于ePub文件的试读方法和基于ePub文件的试读***
技术领域
本发明涉及文件的试读方法技术领域,具体而言,涉及一种基于ePub文件的试读方法和一种基于ePub文件的试读***。
背景技术
目前,ePub(Electronic Publication,电子出版)是一个自由的开放标准,属于一种可以“自动重新编排”的内容,也就是文字内容可以根据阅读设备的特性,以最适于阅读的方式显示。ePub档案内部使用了XHTML(Extensible Hyper Text Markup Language,可扩展超文本标记语言)或DTBook(一种由Daisy Consortium提出的XML标准,其中XML为可扩展标记语言)来展现文字,并以zip压缩格式来包裹档案内容。
在相关的技术方案中,为了获取试读ePub文件,ePub文件的解析方式主要有两种,即解压式和直接式(相对叫法),大多数书籍阅读器都选择了解压式(包括iOS平台上的Ibooks),在某一个位置可以找到整一本书的完整解压文档,但是,解压式获取试读ePub文件有一定的缺点,即对缓存位置的读写速度有一定要求:如果解压(包括运算、写入文件)速度比较慢,那么首次打开的速度也就被迫拖慢,加上渲染、排版等,首次打开的时间就会很长,即使第二次打开的速度比第一次快一些,但是依然会导致用户不好的体验。
因此,如何有效快速地获取试读ePub文件,从而实现了对ePub文件进行批量快速地处理,进而提升用户体验成为亟待解决的问题。
发明内容
本发明正是基于上述问题,提出了一种新的技术方案,通过将ePub文件的整体目录索引文件解析成多个子目录索引文件,从而根据每个子目录索引文件对应的HTML文件内容的大小和目标比例所确定的试读ePub文件的大小,可以有效且快速地获取试读ePub文件,进而实现了对ePub文件进行批量快速地处理,提升了用户体验。
有鉴于此,本发明的一方面提出了一种基于ePub文件的试读方法,包括:获取ePub文件的整体目录索引文件;解析所述整体目录索引文件,以获取所述整体目录索引文件中的每个子目录索引文件对应的HTML文件内容的第一文件大小;根据目标比例确定试读ePub文件的第二文件大小;根据所述第一文件大小和所述第二文件大小确定所述试读ePub文件的试读目录结构,以获取所述试读ePub文件。
在该技术方案中,通过将ePub文件的整体目录索引文件解析成多个子目录索引文件,且每个子目录索引文件对应有HTML(Hyper Text Markup Language,超文本标记语言)文件内容,从而可以按照目标比例获取与试读ePub文件的第二文件大小对应的HTML文件内容,进而可以有效且快速地获取试读ePub文件,实现了对ePub文件进行批量快速地处理,可以提升用户体验。
在上述技术方案中,优选地,获取所述ePub文件的所述整体目录索引文件,具体包括:将所述ePub文件解压至目标路径中;在所述目标路径中,获取所述ePub文件的打包索引文件;解析所述打包索引文件,以获取所述打包索引文件中指定代码文件的标签内容;解析所述标签内容,以获取所述指定代码文件的文件路径;根据所述文件路径获取所述整体目录索引文件。
在该技术方案中,根据ePub文件的打包索引文件中指定代码文件的标签内容,获取所述指定代码文件的文件路径,从而可以根据文件路径获取整体目录索引文件,进而为获取整体目录索引文件中的每个子目录索引文件对应的HTML文件内容的第一文件大小奠定了基础,即为有效且快速地获取试读ePub文件奠定了基础。
在上述技术方案中,优选地,获取所述每个子目录索引文件对应的HTML文件的所述第一文件大小,具体包括:解析所述整体目录索引文件的XML格式至目标对象中;获取所述整体目录索引文件中的目录结构标签,以解析与所述目录结构标签对应的节点列表;根据所述节点列表的目录标签获取对应的所述每个子目录索引文件对应的HTML文件的每个锚点位置;根据所述每个锚点位置解析所述每个子目录索引文件对应的HTML文件的文件内容,确定所述第一文件大小。
在该技术方案中,对解析所述整体目录索引文件进行解析,以根据每个子目录索引文件对应的HTML文件的每个锚点位置确定第一文件大小,为有效且快速地获取试读ePub文件奠定了基础,从而实现了对ePub文件进行批量快速地处理,可以提升用户体验。
在上述技术方案中,优选地,根据所述第一文件大小和所述第二文件大小确定所述试读ePub文件的所述试读目录结构,具体包括:循环累加所述第一文件大小,以得到目标文件大小;判断所述目标文件大小是否大于或等于所述第二文件大小;在判断结果为是时,停止循环累加所述第一文件大小,并确定所述试读ePub文件的所述试读目录结构。
在该技术方案中,由于循环累加的算法比较简单,因此,通过循环累加可以快速地确定试读ePub文件的试读目录结构,从而就可以根据该试读目录结构快速地获取试读ePub文件,进而实现了对ePub文件进行批量快速地处理,可以提升用户体验,优选地,试读ePub文件=与整体目录索引文件对应的HTML文件内容的大小×目标比例。
在上述技术方案中,优选地,在所述目标路径下,将除与所述试读目录结构对应的HTML文件内容以外的剩余HTML文件内容删除,以获取所述试读ePub文件。
在该技术方案中,由于除与试读目录结构对应的HTML文件内容以外的剩余HTML文件内容并不会出现在试读ePub文件中,因此,在目标路径下,可以将剩余HTML文件内容删除,从而可以节省试读ePub文件所占用的内存,进而节省了整个***所占用的内存。
本发明的另一方面提出了一种基于ePub文件的试读***,包括:第一获取模块,用于获取ePub文件的整体目录索引文件;第一解析模块,用于解析所述整体目录索引文件,以获取所述整体目录索引文件中的每个子目录索引文件对应的HTML文件内容的第一文件大小;计算模块,用于根据目标比例确定试读ePub文件的第二文件大小;第一确定模块,用于根据所述第一文件大小和所述第二文件大小确定所述试读ePub文件的试读目录结构,以获取所述试读ePub文件。
在该技术方案中,通过将ePub文件的整体目录索引文件解析成多个子目录索引文件,且每个子目录索引文件对应有HTML文件内容,从而可以按照目标比例获取与试读ePub文件的第二文件大小对应的HTML文件内容,进而可以有效且快速地获取试读ePub文件,实现了对ePub文件进行批量快速地处理,可以提升用户体验。
在上述技术方案中,优选地,所述第一获取模块包括:解压模块,用于将所述ePub文件解压至目标路径中;第二获取模块,用于在所述目标路径中,获取所述ePub文件的打包索引文件;第二解析模块,用于解析所述打包索引文件,以获取所述打包索引文件中指定代码文件的标签内容,以及解析所述标签内容,以获取所述指定代码文件的文件路径;以及所述第二获取模块还用于:根据所述文件路径获取所述整体目录索引文件。
在该技术方案中,根据ePub文件的打包索引文件中指定代码文件的标签内容,获取所述指定代码文件的文件路径,从而可以根据文件路径获取整体目录索引文件,进而为获取整体目录索引文件中的每个子目录索引文件对应的HTML文件内容的第一文件大小奠定了基础,即为有效且快速地获取试读ePub文件奠定了基础。
在上述技术方案中,优选地,所述第一解析模块包括:第三解析模块,用于解析所述整体目录索引文件的XML格式至目标对象中;第三获取模块,用于获取所述整体目录索引文件中的目录结构标签,以解析与所述目录结构标签对应的节点列表,以及根据所述节点列表的目录标签获取对应的所述每个子目录索引文件对应的HTML文件的每个锚点位置;第二确定模块,用于根据所述每个锚点位置解析所述每个子目录索引文件对应的HTML文件的文件内容,确定所述第一文件大小。
在该技术方案中,对解析所述整体目录索引文件进行解析,以根据每个子目录索引文件对应的HTML文件的每个锚点位置确定第一文件大小,为有效且快速地获取试读ePub文件奠定了基础,从而实现了对ePub文件进行批量快速地处理,可以提升用户体验。
在上述技术方案中,优选地,所述第一确定模块包括:累加模块,用于循环累加所述第一文件大小,以得到目标文件大小;判断模块,用于判断所述目标文件大小是否大于或等于所述第二文件大小;第三确定模块,用于在判断结果为是时,停止循环累加所述第一文件大小,并确定所述试读ePub文件的所述试读目录结构。
在该技术方案中,由于循环累加的算法比较简单,因此,通过循环累加可以快速地确定试读ePub文件的试读目录结构,从而就可以根据该试读目录结构快速地获取试读ePub文件,进而实现了对ePub文件进行批量快速地处理,可以提升用户体验,优选地,试读ePub文件=与整体目录索引文件对应的HTML文件内容的大小×目标比例。
在上述技术方案中,优选地,所述第一确定模块还包括:删除模块,用于在所述目标路径下,将除与所述试读目录结构对应的HTML文件内容以外的剩余HTML文件内容删除,以获取所述试读ePub文件。
在该技术方案中,由于除与试读目录结构对应的HTML文件内容以外的剩余HTML文件内容并不会出现在试读ePub文件中,因此,在目标路径下,可以将剩余HTML文件内容删除,从而可以节省试读ePub文件所占用的内存,进而节省了整个***所占用的内存。
通过本发明的技术方案,通过将ePub文件的整体目录索引文件解析成多个子目录索引文件,从而根据每个子目录索引文件对应的HTML文件内容的大小和目标比例所确定的试读ePub文件的大小,可以有效且快速地获取试读ePub文件,进而实现了对ePub文件进行批量快速地处理,可以提升用户体验。
附图说明
图1示出了根据本发明的一个实施例的基于ePub文件的试读方法的流程示意图;
图2示出了根据本发明的另一个实施例的基于ePub文件的试读方法的流程示意图;
图3示出了根据本发明的一个实施例的基于ePub文件的试读***的结构示意图。
具体实施方式
为了可以更清楚地理解本发明的上述目的、特征和优点,下面结合附图和具体实施方式对本发明进行进一步的详细描述。需要说明的是,在不冲突的情况下,本申请的实施例及实施例中的特征可以相互组合。
在下面的描述中阐述了很多具体细节以便于充分理解本发明,但是,本发明还可以采用其他不同于在此描述的其他方式来实施,因此,本发明的保护范围并不受下面公开的具体实施例的限制。
图1示出了根据本发明的一个实施例的基于ePub文件的试读方法的流程示意图。
如图1所示,根据本发明的一个实施例的基于ePub文件的试读方法,包括:
步骤102,获取ePub文件的整体目录索引文件;
步骤104,解析所述整体目录索引文件,以获取所述整体目录索引文件中的每个子目录索引文件对应的HTML文件内容的第一文件大小;
步骤106,根据目标比例确定试读ePub文件的第二文件大小;
步骤108,根据所述第一文件大小和所述第二文件大小确定所述试读ePub文件的试读目录结构,以获取所述试读ePub文件。
在该技术方案中,通过将ePub文件的整体目录索引文件解析成多个子目录索引文件,且每个子目录索引文件对应有HTML文件内容,从而可以按照目标比例获取与试读ePub文件的第二文件大小对应的HTML文件内容,进而可以有效且快速地获取试读ePub文件,实现了对ePub文件进行批量快速地处理,可以提升用户体验。
在上述技术方案中,优选地,步骤102具体包括:将所述ePub文件解压至目标路径中;在所述目标路径中,获取所述ePub文件的打包索引文件;解析所述打包索引文件,以获取所述打包索引文件中指定代码文件的标签内容;解析所述标签内容,以获取所述指定代码文件的文件路径;根据所述文件路径获取所述整体目录索引文件。
在该技术方案中,根据ePub文件的打包索引文件中指定代码文件的标签内容,获取所述指定代码文件的文件路径,从而可以根据文件路径获取整体目录索引文件,进而为获取整体目录索引文件中的每个子目录索引文件对应的HTML文件内容的第一文件大小奠定了基础,即为有效且快速地获取试读ePub文件奠定了基础。
在上述技术方案中,优选地,获取所述每个子目录索引文件对应的HTML文件的所述第一文件大小,具体包括:解析所述整体目录索引文件的XML格式至目标对象中;获取所述整体目录索引文件中的目录结构标签,以解析与所述目录结构标签对应的节点列表;根据所述节点列表的目录标签获取对应的所述每个子目录索引文件对应的HTML文件的每个锚点位置;根据所述每个锚点位置解析所述每个子目录索引文件对应的HTML文件的文件内容,确定所述第一文件大小。
在该技术方案中,对解析所述整体目录索引文件进行解析,以根据每个子目录索引文件对应的HTML文件的每个锚点位置确定第一文件大小,为有效且快速地获取试读ePub文件奠定了基础,从而实现了对ePub文件进行批量快速地处理,可以提升用户体验。
在上述技术方案中,优选地,根据所述第一文件大小和所述第二文件大小确定所述试读ePub文件的所述试读目录结构,具体包括:循环累加所述第一文件大小,以得到目标文件大小;判断所述目标文件大小是否大于或等于所述第二文件大小;在判断结果为是时,停止循环累加所述第一文件大小,并确定所述试读ePub文件的所述试读目录结构。
在该技术方案中,由于循环累加的算法比较简单,因此,通过循环累加可以快速地确定试读ePub文件的试读目录结构,从而就可以根据该试读目录结构快速地获取试读ePub文件,进而实现了对ePub文件进行批量快速地处理,可以提升用户体验,优选地,试读ePub文件=与整体目录索引文件对应的HTML文件内容的大小×目标比例。
在上述技术方案中,优选地,在所述目标路径下,将除与所述试读目录结构对应的HTML文件内容以外的剩余HTML文件内容删除,以获取所述试读ePub文件。
在该技术方案中,由于除与试读目录结构对应的HTML文件内容以外的剩余HTML文件内容并不会出现在试读ePub文件中,因此,在目标路径下,可以将剩余HTML文件内容删除,从而可以节省试读ePub文件所占用的内存,进而节省了整个***所占用的内存。
图2示出了根据本发明的另一个实施例的基于ePub文件的试读方法的流程示意图。
如图2所示,根据本发明的另一个实施例的基于ePub文件的试读方法,包括:
步骤202,将ePub文件解压至目标路径中,并在目标路径中获取ePub文件的打包索引文件。
步骤204,解析打包索引文件,以获取打包索引文件中指定代码文件的标签内容。
步骤206,解析指定代码文件,以对指定代码文件的标签内容进行解析,以获取指定代码文件的文件路径,从而根据文件路径获取整体目录索引文件。
步骤208,读取整体目录索引文件中的目录结构标签。
步骤210,解析与目录结构标签对应的节点列表。
步骤212,解析节点列表的目录标签,以获取对应的每个子目录索引文件对应的HTML文件的每个锚点位置。
步骤214,根据每个锚点位置解析每个子目录索引文件对应的HTML文件的文件内容,计算第一文件大小。
步骤216,循环累加第一文件大小,以得到目标文件大小。
步骤218,判断目标文件大小是否大于或等于第二文件大小,在判断结果为是时,进入步骤220,否则,进入步骤210,其中,第二文件大小是根据目标比例确定的。
步骤220,停止循环累加所述第一文件大小,并生成试读ePub文件的试读目录结构。
步骤222,根据试读目录结构,重新组成新的试读文件。
步骤224,将新的试读文件压缩成试读ePub文件。
图3示出了根据本发明的一个实施例的基于ePub文件的试读***的结构示意图。
如图3所示,根据本发明的一个实施例的基于ePub文件的试读***300,包括:第一获取模块302,用于获取ePub文件的整体目录索引文件;第一解析模块304,用于解析所述整体目录索引文件,以获取所述整体目录索引文件中的每个子目录索引文件对应的HTML文件内容的第一文件大小;计算模块306,用于根据目标比例确定试读ePub文件的第二文件大小;第一确定模块308,用于根据所述第一文件大小和所述第二文件大小确定所述试读ePub文件的试读目录结构,以获取所述试读ePub文件。
在该技术方案中,通过将ePub文件的整体目录索引文件解析成多个子目录索引文件,且每个子目录索引文件对应有HTML文件内容,从而可以按照目标比例获取与试读ePub文件的第二文件大小对应的HTML文件内容,进而可以有效且快速地获取试读ePub文件,实现了对ePub文件进行批量快速地处理,可以提升用户体验。
在上述技术方案中,优选地,所述第一获取模块302包括:解压模块3022,用于将所述ePub文件解压至目标路径中;第二获取模块3024,用于在所述目标路径中,获取所述ePub文件的打包索引文件;第二解析模块3026,用于解析所述打包索引文件,以获取所述打包索引文件中指定代码文件的标签内容,以及解析所述标签内容,以获取所述指定代码文件的文件路径;以及所述第二获取模块3024还用于:根据所述文件路径获取所述整体目录索引文件。
在该技术方案中,根据ePub文件的打包索引文件中指定代码文件的标签内容,获取所述指定代码文件的文件路径,从而可以根据文件路径获取整体目录索引文件,进而为获取整体目录索引文件中的每个子目录索引文件对应的HTML文件内容的第一文件大小奠定了基础,即为有效且快速地获取试读ePub文件奠定了基础。
在上述技术方案中,优选地,所述第一解析模块304包括:第三解析模块3042,用于解析所述整体目录索引文件的XML格式至目标对象中;第三获取模块,用于获取所述整体目录索引文件中的目录结构标签,以解析与所述目录结构标签对应的节点列表,以及根据所述节点列表的目录标签获取对应的所述每个子目录索引文件对应的HTML文件的每个锚点位置;第二确定模块3046,用于根据所述每个锚点位置解析所述每个子目录索引文件对应的HTML文件的文件内容,确定所述第一文件大小。
在该技术方案中,对解析所述整体目录索引文件进行解析,以根据每个子目录索引文件对应的HTML文件的每个锚点位置确定第一文件大小,为有效且快速地获取试读ePub文件奠定了基础,从而实现了对ePub文件进行批量快速地处理,可以提升用户体验。
在上述技术方案中,优选地,所述第一确定模块308包括:累加模块3082,用于循环累加所述第一文件大小,以得到目标文件大小;判断模块3084,用于判断所述目标文件大小是否大于或等于所述第二文件大小;第三确定模块3086,用于在判断结果为是时,停止循环累加所述第一文件大小,并确定所述试读ePub文件的所述试读目录结构。
在该技术方案中,由于循环累加的算法比较简单,因此,通过循环累加可以快速地确定试读ePub文件的试读目录结构,从而就可以根据该试读目录结构快速地获取试读ePub文件,进而实现了对ePub文件进行批量快速地处理,可以提升用户体验,优选地,试读ePub文件=与整体目录索引文件对应的HTML文件内容的大小×目标比例。
在上述技术方案中,优选地,所述第一确定模块308还包括:删除模块3088,用于在所述目标路径下,将除与所述试读目录结构对应的HTML文件内容以外的剩余HTML文件内容删除,以获取所述试读ePub文件。
在该技术方案中,由于除与试读目录结构对应的HTML文件内容以外的剩余HTML文件内容并不会出现在试读ePub文件中,因此,在目标路径下,可以将剩余HTML文件内容删除,从而可以节省试读ePub文件所占用的内存,进而节省了整个***所占用的内存。
综上所述,在本发明的技术方案中,对ePub文件进行解压缩后,对其整体目录索引文件进行解析,确定整体目录索引文件中的每个子目录索引文件对应的HTML文件内容的第一文件大小,并根据目标比例确定试读ePub文件的第二文件大小,根据第一文件大小和第二文件大小确定试读ePub文件的试读目录结构,根据试读目录结构获取试读ePub文件,从而实现了对ePub文件进行批量处理,同时该试读ePub文件可供其他ePub阅读器进行阅读。下面详细说明本发明的技术方案:
1.基于ePub文件的试读***的程序结构主要包括:
bean:数据载体,主要用于存储ePub文件中,以及解析后的整体目录索引文件中的每个子目录索引文件对应的HTML文件内容。
read:算法核心,包括递归解析算法,按比例判断试读内容等。
utils:工具体,包括文件读写,文件解压缩。
mian:主执行方法,调用算法核心模块,进行试读ePub文件的生成。
2.主要步骤为:
将ePub文件通过zip方式解压缩至目标路径中。
进入解压后的目标路径中,读取ePub对应的打包索引文件如package.opf文件,并对打包索引文件进行xml格式解析,优选地,使用公用JAR包DOM4J进行XML格式解析。
读取package.opf中id为ncx文件(指定代码文件)的item标签内容,并对标签内容进行解析,得出ncx文件的文件路径href,优选地,使用公用JAR包DOM4J对标签内容进行解析,使用Element对象中的attribute对象存储了节点标签对应的属性。
根据读取的ncx文件路径,读取文件toc.ncx,此文件为ePub文件的整体目录索引文件。
解析toc.ncx文件的XML格式到JAVA对象(目标对象)中。
读取toc.ncx中的navMap标签(目录结构标签),并进一步进行递归解析与navMap标签对应的navPoint节点列表,优选地,使用DOM4J中的Element对象进行存储navPoint节点列表中的每个节点内容。
根据navPoint的目录标签获取对应的每个子目录索引文件对应的HTML文件的每个锚点位置,并根据每个锚点位置解析每个子目录索引文件对应的HTML文件的文件内容,从而确定第一文件大小,例如,字符格式demo.html为#数字_数字即为文件demo.html的锚点。
按目标比例计算试读ePub文件的第二文件大小,具体地,目标比例是提前确定好的合适的数值(0~1),试读ePub文件=与整体目录索引文件对应的HTML文件内容的大小×目标比例。
循环累加第一文件大小,以得到目标文件大小,当目标文件大小是否大于或等于第二文件大小时循环累加停止,即找到了试读ePub文件的试读目录结构,优选地,循环累加的算法采用递归算法。
将剩余目录对应的链接锚点修改为空白提示页面地址,其中,空白提示页面可以自己进行定制内容。
将除与试读目录结构对应的HTML文件内容以外的剩余HTML文件内容删除。
将整体处理过后的目标路径中的文件进行zip压缩为最终的试读ePub文件。
以上结合附图详细说明了本发明的技术方案,通过将ePub文件的整体目录索引文件解析成多个子目录索引文件,从而根据每个子目录索引文件对应的HTML文件内容的大小和目标比例所确定的试读ePub文件的大小,可以有效且快速地获取试读ePub文件,进而实现了对ePub文件进行批量快速地处理。
在本发明中,术语“第一”、“第二”、“第三”仅用于描述的目的,而不能理解为指示或暗示相对重要性;术语“多个”表示两个或两个以上。对于本领域的普通技术人员而言,可以根据具体情况理解上述术语在本发明中的具体含义。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。