发明名称 一种基于内容差异比较的文档共享方法
摘要 本发明公开了一种基于内容差异比较的文档共享方法,该方法包括:初始化共享文档,将要共享的文档在各网络用户终端进行初始化;等待文档内容的更改;将更改后的文档与更改前的内容进行差异比较;将差异比较的结果进行无损压缩并共享;浏览终端用户接收来自操作终端的更新包;解压更新包并与当前文档合并。本发明即可以保证在线文档共享的完整性、实时性,又可以大大降低由于文档共享带来的网络带宽资源消耗。
申请公布号 CN101807207A 申请公布日期 2010.08.18
申请号 CN201010131214.4 申请日期 2010.03.22
申请人 北京大用科技有限责任公司 发明人 李晓耕
分类号 G06F17/30(2006.01)I 主分类号 G06F17/30(2006.01)I
代理机构 北京永创新实专利事务所 11121 代理人 周长琪
主权项 一种基于内容差异比较的文档共享方法,其特征在于,该方法同时包括操作终端和文档浏览终端两部分内容,具体如下,对于操作终端,步骤有:步骤一:共享文档初始化;对需要共享的文档首先进行初始化操作,包括打开文档、保存文档、通过文件传输协议将该初始文档传输到浏览终端进行共享;首先将一份完整的初始文档通过网络分发到各浏览终端进行初始化,以该初始化文档的内容作为更新的基点;初始化操作还包括保存文档内容,以二进制的格式将文档内容保存到内存文件中;其中所述的内存文件是计算机在内存中开辟的一段存储空间,存储空间随着文档尺寸的增大而递增;步骤二:等待文档内容的更改;等待用户对文档的编辑操作,对共享的文档内容做各种编辑操作包括:增加文字、删除文字、修改格式、插入图片和图形;当文档的修改达到一定的量级触发保存操作,对更改后的文档进行步骤一中所述的保存文档,以二进制格式将修改后的文档保存到一个新的内存文件,为步骤三做准备;步骤三:将更改后的文档与更改前的内容进行差异比较;将更改前的内存文件和更改后的内存文件进行拆分,按照指定的关键词将内存文件拆分成块,记录每个文件块的尺寸、所在文档中的起始位置和结束位置,然后对每一个文件块进行差异比较,从而得到文档变化的内容;采用自定义的数据结构对变化的内容进行精确的记录;文档拆分时首先选用文档拆分关键词,采用二进制方式打开文档所对应的内存文件,将文件读取指针指向文件头部,从文件头按位查找关键词,根据关键词将文件内容分割成多行字符串形式,将所得的行信息按照先后顺序保存到列表中;列表中的每个元素表示一行对象,行对象定义为:Li(i,Hi,Pi,Vi)其中,i取大于或等于1的正整数,i表示行号;Li表示第i行;Hi表示第i行的哈希值;Pi表示第i行在文档中的位置信息;Vi表示第i行的实际字符串值;第i行在文档中的位置信息表示为:Pi(开始位置,结束位置)其中,开始位置和结束位置的取值范围是大于或等于零的整数,开始位置是该行的第一个字符在文档中的位置表示,结束位置是该行的最后一个字符在文档中的位置表示;第i行的哈希值获取方法为:Hn=Cn+2×H(n-1)其中,n表示当前字符的位置,Cn表示当前所取得的该行中第n位字符的整数值,H(n-1)表示该行中前(n-1)位字符的哈希值,当n取值为第i行的总长度时所得到Hn值就是该行的哈希值;在获得更改前和更改后的文档拆分列表和文件块的哈希值之后,按行采用哈希值比较方法进行差异比较;只有在两行的哈希值相等的情况下,才比较两行的字符串值;当两行的哈希值和字符串值都相同的时候,两行的内容才是完全相同的;当两行的哈希值不相等时,说明两行的内容存在差异,不用再比较字符串值;文档内容差异比较方法就是对更改前和更改后的文档拆分列表中的每个行对象都做差异比较,在差异比较过程中所输出的结果就是两份文档的内容差异比较结果;在比较过程完成后,比较的结果按顺序都保存到结果列表中,结果列表中的每个元素都是一个行结构对象,该行结构定义中包括行的字符串值、行在文档中的位置信息、行的操作类型;其中操作类型有四种情况,分别是:行增加、行删除、行更改、行相同;遍历这个结果列表能够得到从旧文档到新文档所做的内容变化;步骤四:将差异比较的结果进行压缩并共享;在步骤三中,文档的差异比较结果存放在一个列表中;首先,按顺序遍历列表中的每个元素,将列表序列化并将结果存放在内存空间中;接着采用无损压缩方法对内存中的数据进行压缩;最后将压缩后的数据通过网络传输到浏览终端,如果经过压缩后的数据尺寸超过了每次发送报文的尺寸,则对大的数据包进行拆分后发送;浏览终端接到数据后进行相反地操作,实现文档内容的共享;对于文档浏览终端,继续实施以下步骤:步骤五:接收来自操作终端的更新包;浏览终端监听网络接收端口,当有新的数据到达时,触发接收线程对网络数据进行接收,并对接收到的数据类型进行判断:如果是内容更新包数据,就对数据包的完整性做检验,为正确解压更新包做准备;如果不是内容更新包数据,就将接收到的数据交给消息处理线程作相应的处理;步骤六:解压更新包并与当前文档进行合并;首先对接收到的压缩更新包进行解压操作,解压接收到的压缩更新包就是对接收到的压缩更新包进行解压操作;接着对解压后的数据进行分析,解压后的数据只是一段二进制的流数据,对解压后的数据进行反序列化操作将其还原成结构化数据;然后重构差异比较结果列表,列表中的每个对象存储的信息包括操作类型、改动内容在文档中的位置信息;最后遍历列表中的行对象,根据行对象的操作类型和位置信息与当前文档内容进行合并,合并更新操作都是在内存文件中操作,根据合并完成后的内容做界面刷新就能够观看到最新的文档内容了。
地址 100191 北京市海淀区学院路35号世宁大厦801室