发明内容
基于此,有必要针对上述响应时间长、容易引起程序崩毁的问题,提供一种文档加载方法及系统。
为实现上述目的,本发明采用如下的技术方案:
一种文档加载方法,包括以下步骤:
读取文档内部排列在前的预定数量的二进制数据,写入I/O缓存中;
提取所述I/O缓存中的数据,进行排版,并将排版完成后的数据写入排版缓存;
提取所述排版缓存中的数据,进行绘制,并显示已绘制完成的数据;
对文档剩下的数据进行空闲读取,并将得到的数据写入所述I/O缓存中;
判断在空闲读取的过程中是否存在用户操作;
若否,则在空闲读取结束后根据所述I/O缓存中的数据进行重新排版和绘制。
一种文档加载系统,包括:
初步读取模块,用于读取文档内部排列在前的预定数量的二进制数据,写入I/O缓存中;
初步排版模块,用于提取所述I/O缓存中的数据,进行排版,并将排版完成后的数据写入排版缓存;
初步绘制模块,用于提取所述排版缓存中的数据,进行绘制,并显示已绘制完成的数据;
空闲读取模块,用于对文档剩下的数据进行空闲读取,并将得到的数据写入所述I/O缓存中;
第一判断模块,用于判断在空闲读取的过程中是否存在用户操作;
重排重绘模块,用于在所述第一判断模块的判断结果为否的情况下,在空闲读取结束后根据所述I/O缓存中的数据进行重新排版和绘制。
由以上方案可以看出,本发明的文档加载方法及系统,分两大步骤来读取文档数据,先进行首排首绘,读取文档前面部分数据进行显示,然后在用户阅读前面已显示内容的空闲时间将余下部分全部读取。采用本发明的方案,一方面解决了读取响应时间长的问题,减少了用户等待时间;另外一方面由于分批进行读取,每次读取的数据量相对减少,因此可以有效防止在程序装载文档时的内存过大,减少程序崩毁现象。
具体实施方式
下面结合附图以及具体的实施例,对本发明的技术方案作进一步的描述。
参见图1所示,一种文档加载方法,包括以下步骤:
步骤S101,打开文档(如WORD文档)的时候,首先读取文档内部排列在前的预定数量的二进制数据,并将读取到的数据写入I/O(input/output,输入输出端口)缓存中。
本步骤中,所述预定数量可以根据具体情况的不同作不同设置。比如可以是文档开头的几页数据,或者是一个文档内容的三分之一部分等等。当读取完这些数据后就可以进入步骤S102。
步骤S102,提取所述I/O缓存中的数据,进行排版,并将排版完成后的数据写入排版缓存,然后进入步骤S103。
步骤S103,提取所述排版缓存中的数据,进行绘制,并显示已绘制完成的数据,然后进入步骤S104。
步骤S104,前面的首排首绘结束后,本步骤中对文档剩下的数据进行空闲读取,得到的数据同样写入所述I/O缓存中,然后进入步骤S105。
步骤S105,判断在空闲读取的过程中是否存在用户操作(如往下浏览等),若否则说明空闲读取还未完成,此时进入步骤S106。
步骤S106,若直到空闲读取完成都没有出现用户操作,则在空闲读取结束后根据所述I/O缓存中的数据进行重新排版和绘制。
本发明中提出空闲读取的概念,在用户阅读前面已显示内容的空闲时间进行余下数据的I/O读取,并对其进行解析。即是让出CPU时间,对文档进行完整的I/O读取,并转入I/O缓存中。而当用户没有强制操作,同时空闲读取完成即是I/O读取完的数据经由排版解析流程后写入缓存区(缓存区就是从文档文件中将数据加载到内存后,解析为程序内部使用的数据流,排版对数据流进行加工后,写入一个缓存,供绘制使用)。之后进入重排机制,对当前排版缓存中的页面数据进行刷新。重新排版结束后通过绘制进行页面刷新,绘制功能是通过提取排版缓存中的数据,进行绘制。
另外,作为一个较好的实施例,在所述步骤S105判断在空闲读取的过程中是否存在用户操作之后,还可以包括如下步骤:
步骤S107,若空闲读取还未完成时出现用户操作,则中断空闲读取操作,并进一步判断所述I/O缓存中是否已有足够的数据以满足用户的操作需求,若是则进入步骤S108,若否则进入步骤S109。
步骤S108,若所述I/O缓存中已有足够的数据,则将该满足用户操作需求的数据直接进行排版和绘制,然后返回步骤S104的空闲读取操作;
步骤S109,若所述I/O缓存中没有足够的数据,此时需要先将数据读取过来。因此先执行读取操作,将所述满足用户操作需求的数据读取过来,然后进行排版和绘制,并在绘制完成后返回步骤S104的空闲读取操作。
以在空闲读取的过程中出现用户的往下浏览操作为例进行说明:若已读取的数据能足够绘制出下一页,则直接进行排版绘制;若已读取的数据不能足够绘制出下一页,则要继续让其读取,直到能将下一页完整绘制时,就进行排版绘制。需要说明的是,本发明中采用强制排版绘制的方式,通过提取排版缓存中的数据来进行绘制。若排版缓存中没有相应的数据,则强行通知排版模块进行相应的排版缓存刷新操作。
另外,为了更进一步的减少程序崩毁现象,作为一个较好的实施例,本发明中还提供一个规则机制——排版缓存刷新机制,即设置所述排版缓存为根据设备的处理能力大小而预先进行定制。当在某个设备上应用本发明方案时,首先获取这个设备的性能参数,得到设备的处理能力大小。因为有些设备处理能力强,那在这个设备上的排版缓存的容量就可以设置得大一些。定制排版缓存的好处是可以保证缓存容量一定,避免排版缓存容量过大,这样一来当检测到所述排版缓存已满时,则可以停止数据的继续写入,从而在绘制以及显示过程中可以有效防止内存使用过大,进一步减少程序崩毁现象。
与上述一种文档加载方法相对应,本发明还提供一种文档加载系统,如图2所示,包括:
初步读取模块101,用于读取文档内部排列在前的预定数量的二进制数据,写入I/O缓存中;
初步排版模块102,用于提取所述I/O缓存中的数据,进行排版,并将排版完成后的数据写入排版缓存;
初步绘制模块103,用于提取所述排版缓存中的数据,进行绘制,并显示已绘制完成的数据;
空闲读取模块104,用于对文档剩下的数据进行空闲读取,并将得到的数据写入所述I/O缓存中;
第一判断模块105,用于判断在空闲读取的过程中是否存在用户操作;
重排重绘模块106,用于在所述第一判断模块的判断结果为否的情况下,在空闲读取结束后根据所述I/O缓存中的数据进行重新排版和绘制。
作为一个较好的实施例,所述文档加载系统还可以包括:
第二判断模块,用于在所述第一判断模块的判断结果为是的情况下,中断空闲读取操作,并判断所述I/O缓存中是否已有足够的数据以满足用户的操作需求;
第一返回模块,用于在所述第二判断模块的判断结果为是的情况下,将该满足用户操作需求的数据进行排版和绘制,然后返回空闲读取操作;
第二返回模块,用于在所述第二判断模块的判断结果为否的情况下,将所述满足用户操作需求的数据读取完毕,然后进行排版和绘制,并在绘制完成后返回空闲读取操作。
作为一个较好的实施例,所述排版缓存可以根据设备的处理能力大小预先进行定制。与此对应,所述文档加载系统还可以包括:检测模块,用于当检测到所述排版缓存已满时,停止数据的继续写入。定制排版缓存的好处是可以保证缓存容量一定,避免排版缓存容量过大。由于排版缓存已满时不能再进行数据写入,这样一来在绘制以及显示过程中可以有效防止内存使用过大,进一步减少程序崩毁现象。
上述一种文档加载系统的其它技术特征与本发明的一种文档加载方法相同,此处不予赘述。
通过以上方案可以看出,本发明的文档加载方法及系统,分两大步骤来读取文档数据,先进行首排首绘,读取文档前面部分数据进行显示,然后在用户阅读前面已显示内容的空闲时间将余下部分全部读取。采用本发明的方案,一方面解决了读取响应时间长的问题,减少了用户等待时间;另外一方面由于分批进行读取,每次读取的数据量相对减少,因此可以有效防止在程序装载文档时的内存过大,减少程序崩毁现象。
以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。