一种基于内容差异比较的文档共享方法

文档序号:6599664阅读:123来源:国知局
专利名称:一种基于内容差异比较的文档共享方法
技术领域
本发明属于数据库技术领域,具体涉及一种基于内容差异比较的文档共享方法。
背景技术
随着Internet的不断普及,新技术的不断发展,自动化的办公系统已经在很大程度上取缔了传统办公室的许多功能。许多企业开始使用网络技术、数据库技术对日常工作 中的各种报表、演讲稿和其它文档进行共享和协同操作,实现了无纸化办公。在日益发展的 网络应用中,有限的网络带宽条件依旧是网络应用的一个限制条件,文档共享属于一种海 量数据在网络上的应用,其应用的效果受限于采用的技术和网络带宽条件。目前,文档共享技术主要有以下几种方式基于Web服务的在线查看,基于数据库 存储的文档检索,基于电子邮件的传输,基于计算机目录共享的文档拷贝,基于桌面共享的 文档共享方法。基于Web服务的在线查看方法主要是通过网页的形式向用户提供服务,共享的文 档首先需要传输的Web服务器上,供用户下载查看。这种方式下文档是单向传播,如果文档 做了更新,共享文档的一方需要重新上传到服务器,浏览的用户还需重新下载,交互性和实 时性都比较差。如果用户只需要查看内容,不需要进行多方交互的时候可以采用该种方法 进行文档共享。基于数据库存储的文档检索主要是使用数据库服务向用户提供内容查阅。共享的 文档首先需要存储到数据库中,再向用户提供内容检索,用户可以通过服务终端查找自己 想要的文档。随着内容的增加,数据库会越来越大,负载也随着数据库的增大而加重,对数 据库的维护成本也很高,数据库的性能直接影响用户使用的效果。这种方式也属于单向交 互,缺乏共享内容的实时更新,只有当数据库里的相应内容更新后,浏览终端才能获取到最 新的文档内容。基于电子邮件的文档共享主要是通过发送邮件附件的形式,将需要共享的文档发 送到需要的用户端,这种方式在日常中最常见。对于文档尺寸不太大的文档,采用邮件附件 的形式比较方便,如果文档比较大,邮件发送的速度就会严重受到影响,有些邮件服务器还 会限制附件的大小,过滤掉邮件的附件。对于需要多方进行商讨的文档,可以通过发送邮件 附件的方式进行共享协作,但是这种方式比较繁琐,效率低下,而且不可靠。基于计算机目录共享的文档拷贝方法主要是在文档共享方将自己计算机中的目 录共享出来,将需要共享的文档放到该共享的目录实现文档共享。文档共享的一方可以设 置共享目录的权限,有访问权限的浏览终端可以直接访问这个共享目录,从共享目录中将 共享文档拷贝到本地机器中查看,或者将修改后的文档放入该共享目录。这种方法的优点 是可以对任何文档进行远程共享,但是存在安全性问题,也缺少内容更新的实时性。基于桌面共享的文档共享方法主要是将需要进行文档共享的一方的计算机桌面 共享出来,提供给浏览方观看。共享一方可以将自己的桌面共享,可以将需要共享的文档在 桌面上打开进行操作,浏览方可以在远程观看到桌面,如果获得了操作权限还可以对远程文档进行操作。这种方式可以实现两个终端之间的文档共享,但是无法实现多方之间的共享,也存在安全方面的风险。

发明内容
本发明的目的是减少文档共享在网络传输中所占的网络带宽资源,提出一种内容 即时更新的文档共享,可以同时在多人之间共享文档。本发明提供了一种基于内容差异比 较的文档共享方法。在实际的应用中,共享的文档可能需要经过多次反复的修改,也可能需 要多人在同一时间对一份文档集中进行修订,要求各浏览节点能够快速、准确地呈现最新 的文档内容,也能够参与文档的修订任务,本发明可以很好的解决这样的应用需求。文档的内容差异比较不能像人脑一样,只通过眼睛就能从文字上辨别出不同之 处。通常在文档中所看到的汉字、图片等对象在计算机处理中是不能直接使用的,都需要 转换成计算机能够识别的格式,一个汉字在计算机中采用了双字节字符表示,而一个英文 字母只占用一个字节,根据这种转换关系就可以将对汉字的比较转换为对双字节字符的比 较。文档内容差异比较方法需要首先将文档保存为二进制的格式,采用选取的关键词对文 档进行分块,将整篇文档的比较转换为对各文件块的比较,拆分关键词的选择很重要,它将 影响到文档被拆分的细度和比较的时空效率。基于内容差异比较的文档共享方法包括文档操作终端和浏览终端,该方法的实现 过程如下在文档操作终端,步骤如下步骤一共享文档初始化;对需要共享的文档首先进行初始化操作,包括打开文档,保存文档,将初始化文档 传输到浏览终端进行共享。步骤二 等待文档内容的更改;对共享的文档做各种编辑操作,并将修改后的文档以二进制的格式保存到一个新 的内存文件中,为步骤三做准备。步骤三将更改后的文档与更改前的内容进行差异比较;将更改前的内存文件和更改后的内存文件进行拆分,按照指定的关键词将内存文 件拆分成块,通常采用换行符作为拆分关键词。记录每个文件块的尺寸、所在文档中的位 置,将文件块按顺序保存到列表中,然后对每一个文件块进行差异比较,从而得到文档变化 的内容。采用结构化的存储方式对变化的内容进行精确的记录,为步骤四做准备。步骤四将差异比较的结果进行压缩并共享;文档的差异比较结果存放在一个列表中,首先,遍历列表中的每个元素,将列表序 列化并将结果存放在内存空间中,列表序列化的目的是将结构化的数据转换成二进制的数 据。采用无损压缩方法对内存中的数据进行压缩,最后将压缩后的数据通过网络传输到各 浏览终端,如果经过压缩后的数据尺寸超过了每次发送报文的尺寸,则对大的数据包进行 拆分后发送,浏览终端接到数据后进行相反地操作,实现文档内容的共享。在文档浏览终端,还需要继续实施以下步骤步骤五接收来自操作终端的更新包;浏览终端监听网络接收端口,当有新的数据到达时,触发接收线程对网络数据进行接收,并对接收到的数据类型进行判断如果是更新包数据,就对数据包的完整性做检验,为正确解压更新包做准备;如果不是更新包数据,就交给消息处理线程做处理。步骤六解压更新包并与当前文档进行合并。首先对接收到的压缩更新包进行解压操作,接着对解压后的数据进行分析,重构 差异比较结果列表,遍历列表中的每个行对象,根据行的操作类型和位置信息与当前文档 内容进行合并,最终得到更新后的文档。本发明的优点在于(1)使用了内容差异比较方法,只对文档中变化的内容做分发共享;(2)采用了结构化的数据存储方式,保证更新内容合并的快速准确;(3)对传输的数据进行压缩,最大程度的降低网络带宽资源的占用和提高传输的 快速;(4)共享文档内容的快速、实时更新。


图1为本发明基于内容差异比较的文档共享方法流程图;图2为本发明文件块的哈希值计算方法流程图;图3为本发明两个文件块内容差异比较的方法流程图;图4为本发明从操作终端到浏览终端的Word文档共享效果图;图5为本发明从操作终端到浏览终端的Excel文档共享效果图。
具体实施例方式下面将结合附图和实施例对本发明作进一步的详细说明。本发明是一种基于内容差异比较的文档共享方法,图1示出了本发明的具体实施 流程对于提供文档共享的操作终端,步骤如下步骤一共享文档初始化;主要是对需要共享的文档首先进行初始化操作,包括打开文档、保存文档、通过文 档传输协议将该初始文档传输到浏览终端进行共享。为了保证各浏览终端的初始状态和操 作终端的状态一致,首先需要将一份完整的初始文档通过网络分发到各浏览终端进行初始 化,以该初始化文档的内容作为更新的基点。初始化操作还包括保存文档内容,主要是以二 进制的格式将文档内容保存到内存文件中,内存文件是计算机在内存中开辟的一段存储空 间,存储空间随着文档尺寸的增大而递增。内存文件具有操作方便、速度快的特点。对于比 较大的文档,内存文件的操作比磁盘文档的操作所耗时间更短。保存文档的内容是为了步 骤三中的内容差异比较做准备。步骤二 等待文档内容的更改;等待用户对文档的编辑操作,对共享的文档内容做编辑操作包括增加文字、删除 文字、修改格式、插入图片和图形。当文档的修改达到一定的量级需要触发保存操作,对更 改后的文档进行步骤一中所述的保存文档,以二进制格式将修改后的文档保存到一个新的 内存文件中,为步骤三做准备。
步骤三将更改后的文档与更改前的内容进行差异比较;在文档编辑中所看到的文档内容可能是汉字、字符,也可能是图片等各种表现形 式,对所看到的内容直接做差异跟踪在计算机中比较难实现,为了对文档内容做差异比较 需要将文档的内容以二进制格式进行保存。在步骤二中每次做完保存都会生成一个新的内 存文件,将更改前的内存文件和更改后的内存文件进行拆分,按照指定的关键词将内存文 件拆分成块,记录每个文件块的尺寸、所在文档中的起始位置和结束位置,然后对每一个文 件块进行差异比较,从而得到文档变化的内容。采用结构化的存储方式对变化的内容进行 精确的记录。文档拆分关键词的选取很重要,它将影响到文档被拆分成块的数量,文件块的数 量会影响到差异比较的效率。通常采用文档换行符作为拆分关键词。文档拆分时首先选用文档拆分关键词,采用二进制方式打开文档所对应的内存文 件,将文件读取指针指向文件头部,从文件头按位查找关键词,根据关键词将文件内容分割 成多行字符串形式,将所得的行信息按照先后顺序保存到列表中。列表中的每个元素表示 一行对象,行对象定义为=Li (i,Hi, Pi, Vi)其中,i取大于或等于1的正整数,i表示行号山表示第i行;氏表示第i行的哈 希值;Pi表示第i行在文档中的位置信息表示第i行的实际字符串值。第i行在文档中的位置信息表示为Pi (开始位置,结束位置)其中,开始位置和结束位置的取值范围是大于或等于零的整数,开始位置是该行 的第一个字符在文档中的位置表示,结束位置是该行的最后一个字符在文档中的位置表
7J\ ο第i行的哈希值获取方法为Hn = C1^XHfc-D其中,η表示当前字符的位置,Cn表示当前所取得的该行中第η位字符的整数值, H^1)表示该行中前(η-1)位字符的哈希值,当η取值为第i行的总长度时所得到Hn值就是 该行的哈希值。图2说明了每个文件块的哈希值获取方法,具体步骤如下步骤3. 1. 1 初始化变量,获取文件块长度初始化变量,获取文件块长度,将存放哈希值的变量清零,将字符指针指向文件块 的第一个字符位置。步骤3. 1. 2 按顺序取字符按顺序取字符,获取当前字符指针所指位置的字符,将该字符存放到一个变量中。步骤3. 1. 3 判断字符的有效性判断字符的有效性,如果字符指针的位置没有超过文件块的长度并且所取到的字 符不是空字符,那么该字符就是一个有效的字符,可以进入下一步的操作。如果已经到达文 件块的尾部,就输出该文件块的哈希值。步骤3. 1. 4 获取累计哈希值假设当前字符位置为η,η取值为不大于文件块长度的正整数,Hilri)为前面η_1 个字符的哈希值。在计算机中每个字符占一个字节,可以用一个整数值表示,采用(;表示当前所取得的字符对应的整数值,Hn表示前η个字符的哈希值,Hn的获取方法为Ηη = Cn+2XHilri),获得该值后将字符指针值加1,使字符指针指向文件块中的下一个字符,重复 步骤3. 1. 2的操作,直到字符指针到达文件块的尾部,就可以获得该文件块的哈希值。在获得更改前和更改后的文档拆分列表和文件块的哈希值之后,按行采用哈希值比较方法进行差异比较。只有在两行的哈希值相等的情况下,才比较两行的字符串值;当两 行的哈希值和字符串值都相同的时候,两行的内容才是完全相同的。当两行的哈希值不相 等时,说明两行的内容存在差异,不用再比较字符串值。采用哈希值比较方法具有更高的效 率。假设修改前的文档经过拆分后的存储列表为第一列表,修改后的文档经过拆分后 的存储列表为第二列表,第一列表和第二列表中的每个元素表示一个行对象,一个行对象 就表示一个文件块。图3说明了第一列表中的一个行对象和第二列表中的行对象进行内容 差异比较的方法,包括以下几个步骤步骤3. 2. 1 保存第一列表和第二列表的当前行位置保存当前行位置,就是将更改前的文件块列表和更改后的文件块列表的当前行位 置标号保存在变量里。在最开始比较前,第一列表的当前行指向第一列表的第一个行元素 的位置,第二列表的当前行指向第二列表的第一个行元素的位置。步骤3. 2. 2 获取第一列表当前行值第一列表中的每个元素都表示一个行对象,根据当前行位置查找列表,可以获取 到第一列表中当前行对象的哈希值和字符串值,首先获取第一列表的当前行的哈希值作为 比较基准。步骤3. 2. 3 获取第二列表当前行值第二列表中的每个元素也是一个行对象,根据第二列表的当前行位置查找列表, 可以获得第二列表的当前行对象的哈希值和字符串值。步骤3. 2. 4 判断两行的哈希值判断两行的哈希值和字符串值是否相同。先比较两行的哈希值,如果两行的哈希 值相同,再比较两行的字符串值,如果两行的哈希值和字符串值的比较结果都相同,说明在 第二列表中找到了与第一列表中当前行相同的行,输出第二列表中该行的位置信息并结束 比较过程。如果两行的哈希值不相等,或者是两行的哈希值相等但是两行的字符串值不相 同,就需要继续在第二列表中查找,如果已经到了第二列表的结束位置还没有找到值相同 的行,说明第一列表的当前行在第二列表中没有与其值相同的行对象,此时退出比较过程, 输出比较结果。步骤3. 2. 5 将第二列表的当前行递增如果第一列表的当前行值和第二列表的当前行值不相同,就需要将第二列表的当 前行递增。将第二列表的当前行位置加一,使其指向列表中的下一个行对象作为当前行,返 回到步骤3. 2. 3继续操作。文档内容差异比较方法就是对更改前和更改后的文档拆分列表中的每个行对象 都做差异比较,在差异比较过程中所输出的结果就是两份文档的内容差异比较结果。图3所示的步骤只说明了第一列表的一个行对象和第二列表中的所有行对象进 行差异比较的方法。要想完整的获得整个文档的差异比较结果,就需要按顺序遍历第一列表的所有行对象和第二列表的所有行对象,按行进行差异比较。整个处理过程描述如下首先,将第一列表的当前行位置指向列表的首位置,将第二列表的当前行位置指 向列表的首位置,保存第一列表和第二列表的当前行对象的位置,遍历第一列表,取第一列 表中的当前行对象的哈希值和字符串值作为比较基准,在第二列表中从当前位置开始按顺 序进行查找,采用图3中的方法有两种结果,针对每种结果的处理方法如下第一种结果是在第二列表中找到了值相同的行对象,记录第二列 表中该行对象的 位置,设该位置为P2,如果该行对象的位置标号大于第二列表的当前行位置,说明从第二列 表的当前行位置开始到P2-I位置的所有行对象都是新增的内容,需要将这些内容按顺序加 入到结果列表中;如果位置P2和第二列表的当前位置标号相同,说明第二列表中的当前位 置的行对象内容同第一列表中当前位置的行对象内容相同。第二种结果是在第二列表中没有找到值相同的行对象,这时需要反过来做比较, 就是用第二列表中当前行对象的值作为比较基准,在第一列表中进行查找,查找结果也有 两种情况如果在第一列表中找到值相同的行对象,记录该行在第一列表中的位置标号,设 该位置为P1,若该位置比第一列表的当前行位置还大,说明从第一列表的当前行位置开始 到位置P1之前的所有行内容已经被删除,将比较的结果记录到结果列表中;如果在第一列 表中没有找到值相同的行对象,说明第二列表中当前行对象的内容是新增加的内容,将比 较结果记录到结果列表中。接着,改变第一列表的当前行对象为列表中的下一行,改变第二列表的当前行对 象为列表中的下一行,使用第一列表的当前行对象的哈希值和字符串值作为基准,在第二 列表中进行查找,查找的过程如图3所示。重复上面所述的步骤,直到处理完第一列表和第 二列表中的所有行对象,就可以获得文档内容差异的比较结果。在比较过程完成后,比较的结果按顺序都保存到结果列表中,结果列表中的每个 元素都是一个行结构对象,该行结构定义中包括行的字符串值、行在文档中的位置信息、行 的操作类型。其中操作类型有四种情况,分别是行增加、行删除、行更改、行相同。遍历这 个结果列表就可以得到从旧文档到新文档所做的内容变化。步骤四将差异比较的结果进行压缩并共享;为了更少的占用网络传输带宽需要尽可能的降低数据传输量。采用数据压缩方 法既可以加密原始数据,也可以减少数据量。文档的差异比较结果存放在一个列表中,首 先,按顺序遍历列表中的每个元素,将列表序列化并将结果存放在内存空间中;接着采用无 损压缩方法对内存中的数据进行压缩;最后将压缩后的数据通过网络传输到浏览终端,如 果经过压缩后的数据尺寸超过了每次发送报文的尺寸,则需要对大的数据包进行拆分后发 送。浏览终端接到数据后进行相反地操作,就可以实现文档内容的共享。对于文档的浏览终端,还需要继续实施以下步骤步骤五接收来自操作终端的更新包;浏览终端监听网络接收端口,当有新的数据到达时,触发接收线程对网络数据进 行接收。由于网络数据类型包括内容更新数据,还包括控制数据,需要首先对接收到的数据 类型进行判断如果是内容更新包数据,就对数据包的完整性做检验,为正确解压更新包做 准备;如果不是内容更新包数据,就将接收到的数据交给消息处理线程作相应的处理。数据 包完整性检验主要是检查接收到的数据大小是否与实际发送的数据大小相同,如果在发送端将一个大的数据包拆分成若干个小的报文发送,就需要接收端进行报文组合,只有在要 求接收的数据包完全接收后才能够正确解压数据。步骤六解压更新包并与当前文档进行合并;首先对接收到的压缩更新包进行解压操作,解压接收到的压缩更新包就是对接收 到的压缩更新包进行解压操作;接着对解压后的数据进行分析,解压后的数据只是一段二 进制的流数据,需要进行反序列化操作将其还原成 结构化数据;然后重构差异比较结果列 表,列表中的每个对象存储的信息包括操作类型、改动内容在文档中的位置信息;最后遍历 列表中的行对象,根据行对象的操作类型和位置信息与当前文档内容进行合并,合并更新 操作都是在内存文件中操作,根据合并完成后的内容做界面刷新就能够观看到最新的文档 内容了。图4为本发明从操作终端到浏览终端的Word文档共享效果图。在更新前,操作终 端在文档中做编辑操作,在当前页面的中间输入了两行文字,浏览终端目前可以浏览文档 内容,在操作终端做完远程更新后,浏览终端立刻可以看到操作终端输入的两行文字的内 容,浏览终端的文档和操作终端的文档保持着同步更新。图5为本发明从操作终端到浏览终端的Excel文档共享效果图。操作终端在文档 中放入一个饼状分析图,在操作终端更新前,浏览终端看不到最新的分析图。当操作终端对 文档编辑完成,做完远程更新后,在浏览终端立刻可以看到最新的饼状分析图。
权利要求
一种基于内容差异比较的文档共享方法,其特征在于,该方法同时包括操作终端和文档浏览终端两部分内容,具体如下,对于操作终端,步骤有步骤一共享文档初始化;对需要共享的文档首先进行初始化操作,包括打开文档、保存文档、通过文件传输协议将该初始文档传输到浏览终端进行共享;首先将一份完整的初始文档通过网络分发到各浏览终端进行初始化,以该初始化文档的内容作为更新的基点;初始化操作还包括保存文档内容,以二进制的格式将文档内容保存到内存文件中;其中所述的内存文件是计算机在内存中开辟的一段存储空间,存储空间随着文档尺寸的增大而递增;步骤二等待文档内容的更改;等待用户对文档的编辑操作,对共享的文档内容做各种编辑操作包括增加文字、删除文字、修改格式、插入图片和图形;当文档的修改达到一定的量级触发保存操作,对更改后的文档进行步骤一中所述的保存文档,以二进制格式将修改后的文档保存到一个新的内存文件,为步骤三做准备;步骤三将更改后的文档与更改前的内容进行差异比较;将更改前的内存文件和更改后的内存文件进行拆分,按照指定的关键词将内存文件拆分成块,记录每个文件块的尺寸、所在文档中的起始位置和结束位置,然后对每一个文件块进行差异比较,从而得到文档变化的内容;采用自定义的数据结构对变化的内容进行精确的记录;文档拆分时首先选用文档拆分关键词,采用二进制方式打开文档所对应的内存文件,将文件读取指针指向文件头部,从文件头按位查找关键词,根据关键词将文件内容分割成多行字符串形式,将所得的行信息按照先后顺序保存到列表中;列表中的每个元素表示一行对象,行对象定义为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值就是该行的哈希值;在获得更改前和更改后的文档拆分列表和文件块的哈希值之后,按行采用哈希值比较方法进行差异比较;只有在两行的哈希值相等的情况下,才比较两行的字符串值;当两行的哈希值和字符串值都相同的时候,两行的内容才是完全相同的;当两行的哈希值不相等时,说明两行的内容存在差异,不用再比较字符串值;文档内容差异比较方法就是对更改前和更改后的文档拆分列表中的每个行对象都做差异比较,在差异比较过程中所输出的结果就是两份文档的内容差异比较结果;在比较过程完成后,比较的结果按顺序都保存到结果列表中,结果列表中的每个元素都是一个行结构对象,该行结构定义中包括行的字符串值、行在文档中的位置信息、行的操作类型;其中操作类型有四种情况,分别是行增加、行删除、行更改、行相同;遍历这个结果列表能够得到从旧文档到新文档所做的内容变化;步骤四将差异比较的结果进行压缩并共享;在步骤三中,文档的差异比较结果存放在一个列表中;首先,按顺序遍历列表中的每个元素,将列表序列化并将结果存放在内存空间中;接着采用无损压缩方法对内存中的数据进行压缩;最后将压缩后的数据通过网络传输到浏览终端,如果经过压缩后的数据尺寸超过了每次发送报文的尺寸,则对大的数据包进行拆分后发送;浏览终端接到数据后进行相反地操作,实现文档内容的共享;对于文档浏览终端,继续实施以下步骤步骤五接收来自操作终端的更新包;浏览终端监听网络接收端口,当有新的数据到达时,触发接收线程对网络数据进行接收,并对接收到的数据类型进行判断如果是内容更新包数据,就对数据包的完整性做检验,为正确解压更新包做准备;如果不是内容更新包数据,就将接收到的数据交给消息处理线程作相应的处理;步骤六解压更新包并与当前文档进行合并;首先对接收到的压缩更新包进行解压操作,解压接收到的压缩更新包就是对接收到的压缩更新包进行解压操作;接着对解压后的数据进行分析,解压后的数据只是一段二进制的流数据,对解压后的数据进行反序列化操作将其还原成结构化数据;然后重构差异比较结果列表,列表中的每个对象存储的信息包括操作类型、改动内容在文档中的位置信息;最后遍历列表中的行对象,根据行对象的操作类型和位置信息与当前文档内容进行合并,合并更新操作都是在内存文件中操作,根据合并完成后的内容做界面刷新就能够观看到最新的文档内容了。
2.根据权利要求1所述的一种基于内容差异比较的文档共享方法,其特征在于步骤 三中所述的文件块的哈希值获取方法,具体步骤如下 步骤3. 1. 1 初始化变量,获取文件块长度初始化变量,获取文件块长度,将存放哈希值的变量清零,将字符指针指向文件块的第 一个字符位置;步骤3. 1.2:按顺序取字符按顺序取字符,获取当前字符指针所指位置的字符,将该字符存放到一个变量中; 步骤3. 1.3:判断字符的有效性判断字符的有效性,如果字符指针的位置没有超过文件块的长度并且所取到的字符不 是空字符,那么该字符就是一个有效的字符,进入下一步的操作;如果已经到达文件块的尾 部,就输出该文件块的哈希值;步骤3. 1.4:获取累计哈希值获得前η个字符的哈希值Hn后,将字符指针值加1,使字符指针指向文件块中的下一个 字符,重复步骤3. 1. 2的操作,直到字符指针到达文件块的尾部,获得该文件块的哈希值。
3.根据权利要求1所述的一种基于内容差异比较的文档共享方法,其特征在于步骤 三中所述的文件块差异比较方法,假设修改前的文档经过拆分后的存储列表为第一列表, 修改后的文档经过拆分后的存储列表为第二列表,第一列表和第二列表中的每个元素表示 一个行对象,一个行对象就表示一个文件块;第一列表中的一个行对象和第二列表中的行 对象进行内容差异比较的方法,包括以下几个步骤步骤3. 2. 1 保存第一列表和第二列表的当前行位置保存当前行位置,将更改前的文件块列表和更改后的文件块列表的当前行位置标号保 存在变量里;在最开始比较前,第一列表的当前行指向第一列表的第一个行元素的位置,第 二列表的当前行指向第二列表的第一个行元素的位置;步骤3. 2. 2 获取第一列表当前行值第一列表中的每个元素都表示一个行对象,根据当前行位置查找列表,获取到第一列 表中当前行对象的哈希值和字符串值,首先获取第一列表的当前行的哈希值作为比较基 准;步骤3. 2. 3 获取第二列表当前行值第二列表中的每个元素也是一个行对象,根据第二列表的当前行位置查找列表,获得 第二列表的当前行对象的哈希值和字符串值;步骤3. 2. 4:判断两行的哈希值判断两行的哈希值和字符串值是否相同;先比较两行的哈希值,如果两行的哈希值相 同,再比较两行的字符串值,如果两行的哈希值和字符串值的比较结果都相同,说明在第二 列表中找到了与第一列表中当前行相同的行,输出第二列表中该行的位置信息并结束比较 过程;如果两行的哈希值不相等,或者是两行的哈希值相等但是两行的字符串值不相同,就 继续在第二列表中查找,如果已经到了第二列表的结束位置还没有找到值相同的行,说明 第一列表的当前行在第二列表中没有与其值相同的行对象,此时退出比较过程,输出比较 结果;步骤3. 2. 5 将第二列表的当前行递增如果第一列表的当前行值和第二列表的当前行值不相同,就将第二列表的当前行递 增;将第二列表的当前行位置加一,使其指向列表中的下一个行对象作为当前行,返回到步 骤3. 2. 3继续操作。
4.根据权利要求1所述的一种基于内容差异比较的文档共享方法,其特征在于步骤 三中所述的文档内容差异比较方法,假设修改前的文档经过拆分后的存储列表为第一列 表,修改后的文档经过拆分后的存储列表为第二列表,第一列表和第二列表中的每个元素 表示一个行对象,要想完整的获得整个文档的差异比较结果,就需要按顺序遍历第一列表 的所有行对象和第二列表的所有行对象,按行进行差异比较;首先,将第一列表的当前行位置指向列表的首位置,将第二列表的当前行位置指向列 表的首位置,保存第一列表和第二列表的当前行对象的位置,遍历第一列表,取第一列表中 的当前行对象的哈希值和字符串值作为比较基准,在第二列表中从当前位置开始按顺序进行查找比较,有两种结果输出,针对每种结果的处理方法如下第一种结果是在第二列表中找到了值相同的行对象,记录第二列表中该行对象的位置,设该位置为P2,如果该行对象的位置标号大于第二列表的当前行位置,则从第二列表的 当前行位置开始到P2-I位置的所有行对象都是新增的内容,将这些内容按顺序加入到结果 列表中;如果位置P2和第二列表的当前位置标号相同,则第二列表中的当前位置的行对象 内容同第一列表中当前位置的行对象内容相同,将比较结果记录到结果列表中;第二种结果是在第二列表中没有找到值相同的行对象,则反过来做比较,用第二列表 中当前行对象的值作为比较基准,在第一列表中进行查找,查找结果也有两种情况如果在 第一列表中找到值相同的行对象,记录该行在第一列表中的位置标号,设该位置为P1,若该 位置比第一列表的当前行位置还大,则从第一列表的当前行位置开始到位置P1之前的所有 行内容已经被删除,将比较的结果记录到结果列表中;如果在第一列表中没有找到值相同 的行对象,则第二列表中当前行对象的内容是新增加的内容,将比较结果记录到结果列表 中;接着,改变第一列表的当前行对象为列表中的下一行,改变第二列表的当前行对象为 列表中的下一行,使用第一列表的当前行对象的哈希值和字符串值作为基准,在第二列表 中进行查找,重复上面所述的方法,直到处理完第一列表和第二列表中的所有行对象,获得 文档内容差异的比较结果;最后,比较的结果按顺序都保存到结果列表中,结果列表中的每个元素都是一个行结 构对象,该行结构定义中包括行的字符串值、行在文档中的位置信息、行的操作类型;其中 操作类型有四种情况,分别是行增加、行删除、行更改、行相同;遍历这个结果列表就能够 得到从旧文档到新文档所做的内容变化。
全文摘要
本发明公开了一种基于内容差异比较的文档共享方法,该方法包括初始化共享文档,将要共享的文档在各网络用户终端进行初始化;等待文档内容的更改;将更改后的文档与更改前的内容进行差异比较;将差异比较的结果进行无损压缩并共享;浏览终端用户接收来自操作终端的更新包;解压更新包并与当前文档合并。本发明即可以保证在线文档共享的完整性、实时性,又可以大大降低由于文档共享带来的网络带宽资源消耗。
文档编号G06F17/30GK101807207SQ20101013121
公开日2010年8月18日 申请日期2010年3月22日 优先权日2010年3月22日
发明者李晓耕 申请人:北京大用科技有限责任公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1