CN101807207A - 一种基于内容差异比较的文档共享方法 - Google Patents
一种基于内容差异比较的文档共享方法 Download PDFInfo
- Publication number
- CN101807207A CN101807207A CN 201010131214 CN201010131214A CN101807207A CN 101807207 A CN101807207 A CN 101807207A CN 201010131214 CN201010131214 CN 201010131214 CN 201010131214 A CN201010131214 A CN 201010131214A CN 101807207 A CN101807207 A CN 101807207A
- Authority
- CN
- China
- Prior art keywords
- tabulation
- document
- row
- content
- current line
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Abstract
本发明公开了一种基于内容差异比较的文档共享方法,该方法包括:初始化共享文档,将要共享的文档在各网络用户终端进行初始化;等待文档内容的更改;将更改后的文档与更改前的内容进行差异比较;将差异比较的结果进行无损压缩并共享;浏览终端用户接收来自操作终端的更新包;解压更新包并与当前文档合并。本发明即可以保证在线文档共享的完整性、实时性,又可以大大降低由于文档共享带来的网络带宽资源消耗。
Description
技术领域
本发明属于数据库技术领域,具体涉及一种基于内容差异比较的文档共享方法。
背景技术
随着Internet的不断普及,新技术的不断发展,自动化的办公系统已经在很大程度上取缔了传统办公室的许多功能。许多企业开始使用网络技术、数据库技术对日常工作中的各种报表、演讲稿和其它文档进行共享和协同操作,实现了无纸化办公。在日益发展的网络应用中,有限的网络带宽条件依旧是网络应用的一个限制条件,文档共享属于一种海量数据在网络上的应用,其应用的效果受限于采用的技术和网络带宽条件。
目前,文档共享技术主要有以下几种方式:基于Web服务的在线查看,基于数据库存储的文档检索,基于电子邮件的传输,基于计算机目录共享的文档拷贝,基于桌面共享的文档共享方法。
基于Web服务的在线查看方法主要是通过网页的形式向用户提供服务,共享的文档首先需要传输的Web服务器上,供用户下载查看。这种方式下文档是单向传播,如果文档做了更新,共享文档的一方需要重新上传到服务器,浏览的用户还需重新下载,交互性和实时性都比较差。如果用户只需要查看内容,不需要进行多方交互的时候可以采用该种方法进行文档共享。
基于数据库存储的文档检索主要是使用数据库服务向用户提供内容查阅。共享的文档首先需要存储到数据库中,再向用户提供内容检索,用户可以通过服务终端查找自己想要的文档。随着内容的增加,数据库会越来越大,负载也随着数据库的增大而加重,对数据库的维护成本也很高,数据库的性能直接影响用户使用的效果。这种方式也属于单向交互,缺乏共享内容的实时更新,只有当数据库里的相应内容更新后,浏览终端才能获取到最新的文档内容。
基于电子邮件的文档共享主要是通过发送邮件附件的形式,将需要共享的文档发送到需要的用户端,这种方式在日常中最常见。对于文档尺寸不太大的文档,采用邮件附件的形式比较方便,如果文档比较大,邮件发送的速度就会严重受到影响,有些邮件服务器还会限制附件的大小,过滤掉邮件的附件。对于需要多方进行商讨的文档,可以通过发送邮件附件的方式进行共享协作,但是这种方式比较繁琐,效率低下,而且不可靠。
基于计算机目录共享的文档拷贝方法主要是在文档共享方将自己计算机中的目录共享出来,将需要共享的文档放到该共享的目录实现文档共享。文档共享的一方可以设置共享目录的权限,有访问权限的浏览终端可以直接访问这个共享目录,从共享目录中将共享文档拷贝到本地机器中查看,或者将修改后的文档放入该共享目录。这种方法的优点是可以对任何文档进行远程共享,但是存在安全性问题,也缺少内容更新的实时性。
基于桌面共享的文档共享方法主要是将需要进行文档共享的一方的计算机桌面共享出来,提供给浏览方观看。共享一方可以将自己的桌面共享,可以将需要共享的文档在桌面上打开进行操作,浏览方可以在远程观看到桌面,如果获得了操作权限还可以对远程文档进行操作。这种方式可以实现两个终端之间的文档共享,但是无法实现多方之间的共享,也存在安全方面的风险。
发明内容
本发明的目的是减少文档共享在网络传输中所占的网络带宽资源,提出一种内容即时更新的文档共享,可以同时在多人之间共享文档。本发明提供了一种基于内容差异比较的文档共享方法。在实际的应用中,共享的文档可能需要经过多次反复的修改,也可能需要多人在同一时间对一份文档集中进行修订,要求各浏览节点能够快速、准确地呈现最新的文档内容,也能够参与文档的修订任务,本发明可以很好的解决这样的应用需求。
文档的内容差异比较不能像人脑一样,只通过眼睛就能从文字上辨别出不同之处。通常在文档中所看到的汉字、图片等对象在计算机处理中是不能直接使用的,都需要转换成计算机能够识别的格式,一个汉字在计算机中采用了双字节字符表示,而一个英文字母只占用一个字节,根据这种转换关系就可以将对汉字的比较转换为对双字节字符的比较。文档内容差异比较方法需要首先将文档保存为二进制的格式,采用选取的关键词对文档进行分块,将整篇文档的比较转换为对各文件块的比较,拆分关键词的选择很重要,它将影响到文档被拆分的细度和比较的时空效率。
基于内容差异比较的文档共享方法包括文档操作终端和浏览终端,该方法的实现过程如下:
在文档操作终端,步骤如下:
步骤一:共享文档初始化;
对需要共享的文档首先进行初始化操作,包括打开文档,保存文档,将初始化文档传输到浏览终端进行共享。
步骤二:等待文档内容的更改;
对共享的文档做各种编辑操作,并将修改后的文档以二进制的格式保存到一个新的内存文件中,为步骤三做准备。
步骤三:将更改后的文档与更改前的内容进行差异比较;
将更改前的内存文件和更改后的内存文件进行拆分,按照指定的关键词将内存文件拆分成块,通常采用换行符作为拆分关键词。记录每个文件块的尺寸、所在文档中的位置,将文件块按顺序保存到列表中,然后对每一个文件块进行差异比较,从而得到文档变化的内容。采用结构化的存储方式对变化的内容进行精确的记录,为步骤四做准备。
步骤四:将差异比较的结果进行压缩并共享;
文档的差异比较结果存放在一个列表中,首先,遍历列表中的每个元素,将列表序列化并将结果存放在内存空间中,列表序列化的目的是将结构化的数据转换成二进制的数据。采用无损压缩方法对内存中的数据进行压缩,最后将压缩后的数据通过网络传输到各浏览终端,如果经过压缩后的数据尺寸超过了每次发送报文的尺寸,则对大的数据包进行拆分后发送,浏览终端接到数据后进行相反地操作,实现文档内容的共享。
在文档浏览终端,还需要继续实施以下步骤:
步骤五:接收来自操作终端的更新包;
浏览终端监听网络接收端口,当有新的数据到达时,触发接收线程对网络数据进行接收,并对接收到的数据类型进行判断:如果是更新包数据,就对数据包的完整性做检验,为正确解压更新包做准备;如果不是更新包数据,就交给消息处理线程做处理。
步骤六:解压更新包并与当前文档进行合并。
首先对接收到的压缩更新包进行解压操作,接着对解压后的数据进行分析,重构差异比较结果列表,遍历列表中的每个行对象,根据行的操作类型和位置信息与当前文档内容进行合并,最终得到更新后的文档。
本发明的优点在于:
(1)使用了内容差异比较方法,只对文档中变化的内容做分发共享;
(2)采用了结构化的数据存储方式,保证更新内容合并的快速准确;
(3)对传输的数据进行压缩,最大程度的降低网络带宽资源的占用和提高传输的快速;
(4)共享文档内容的快速、实时更新。
附图说明
图1为本发明基于内容差异比较的文档共享方法流程图;
图2为本发明文件块的哈希值计算方法流程图;
图3为本发明两个文件块内容差异比较的方法流程图;
图4为本发明从操作终端到浏览终端的Word文档共享效果图;
图5为本发明从操作终端到浏览终端的Excel文档共享效果图。
具体实施方式
下面将结合附图和实施例对本发明作进一步的详细说明。
本发明是一种基于内容差异比较的文档共享方法,图1示出了本发明的具体实施流程:
对于提供文档共享的操作终端,步骤如下:
步骤一:共享文档初始化;
主要是对需要共享的文档首先进行初始化操作,包括打开文档、保存文档、通过文档传输协议将该初始文档传输到浏览终端进行共享。为了保证各浏览终端的初始状态和操作终端的状态一致,首先需要将一份完整的初始文档通过网络分发到各浏览终端进行初始化,以该初始化文档的内容作为更新的基点。初始化操作还包括保存文档内容,主要是以二进制的格式将文档内容保存到内存文件中,内存文件是计算机在内存中开辟的一段存储空间,存储空间随着文档尺寸的增大而递增。内存文件具有操作方便、速度快的特点。对于比较大的文档,内存文件的操作比磁盘文档的操作所耗时间更短。保存文档的内容是为了步骤三中的内容差异比较做准备。
步骤二:等待文档内容的更改;
等待用户对文档的编辑操作,对共享的文档内容做编辑操作包括:增加文字、删除文字、修改格式、插入图片和图形。当文档的修改达到一定的量级需要触发保存操作,对更改后的文档进行步骤一中所述的保存文档,以二进制格式将修改后的文档保存到一个新的内存文件中,为步骤三做准备。
步骤三:将更改后的文档与更改前的内容进行差异比较;
在文档编辑中所看到的文档内容可能是汉字、字符,也可能是图片等各种表现形式,对所看到的内容直接做差异跟踪在计算机中比较难实现,为了对文档内容做差异比较需要将文档的内容以二进制格式进行保存。在步骤二中每次做完保存都会生成一个新的内存文件,将更改前的内存文件和更改后的内存文件进行拆分,按照指定的关键词将内存文件拆分成块,记录每个文件块的尺寸、所在文档中的起始位置和结束位置,然后对每一个文件块进行差异比较,从而得到文档变化的内容。采用结构化的存储方式对变化的内容进行精确的记录。
文档拆分关键词的选取很重要,它将影响到文档被拆分成块的数量,文件块的数量会影响到差异比较的效率。通常采用文档换行符作为拆分关键词。
文档拆分时首先选用文档拆分关键词,采用二进制方式打开文档所对应的内存文件,将文件读取指针指向文件头部,从文件头按位查找关键词,根据关键词将文件内容分割成多行字符串形式,将所得的行信息按照先后顺序保存到列表中。列表中的每个元素表示一行对象,行对象定义为: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说明了每个文件块的哈希值获取方法,具体步骤如下:
步骤3.1.1:初始化变量,获取文件块长度
初始化变量,获取文件块长度,将存放哈希值的变量清零,将字符指针指向文件块的第一个字符位置。
步骤3.1.2:按顺序取字符
按顺序取字符,获取当前字符指针所指位置的字符,将该字符存放到一个变量中。
步骤3.1.3:判断字符的有效性
判断字符的有效性,如果字符指针的位置没有超过文件块的长度并且所取到的字符不是空字符,那么该字符就是一个有效的字符,可以进入下一步的操作。如果已经到达文件块的尾部,就输出该文件块的哈希值。
步骤3.1.4:获取累计哈希值
假设当前字符位置为n,n取值为不大于文件块长度的正整数,H(n-1)为前面n-1个字符的哈希值。在计算机中每个字符占一个字节,可以用一个整数值表示,采用Cn表示当前所取得的字符对应的整数值,Hn表示前n个字符的哈希值,Hn的获取方法为:Hn=Cn+2×H(n-1),获得该值后将字符指针值加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-1位置的所有行对象都是新增的内容,需要将这些内容按顺序加入到结果列表中;如果位置P2和第二列表的当前位置标号相同,说明第二列表中的当前位置的行对象内容同第一列表中当前位置的行对象内容相同。
第二种结果是在第二列表中没有找到值相同的行对象,这时需要反过来做比较,就是用第二列表中当前行对象的值作为比较基准,在第一列表中进行查找,查找结果也有两种情况:如果在第一列表中找到值相同的行对象,记录该行在第一列表中的位置标号,设该位置为P1,若该位置比第一列表的当前行位置还大,说明从第一列表的当前行位置开始到位置P1之前的所有行内容已经被删除,将比较的结果记录到结果列表中;如果在第一列表中没有找到值相同的行对象,说明第二列表中当前行对象的内容是新增加的内容,将比较结果记录到结果列表中。
接着,改变第一列表的当前行对象为列表中的下一行,改变第二列表的当前行对象为列表中的下一行,使用第一列表的当前行对象的哈希值和字符串值作为基准,在第二列表中进行查找,查找的过程如图3所示。重复上面所述的步骤,直到处理完第一列表和第二列表中的所有行对象,就可以获得文档内容差异的比较结果。
在比较过程完成后,比较的结果按顺序都保存到结果列表中,结果列表中的每个元素都是一个行结构对象,该行结构定义中包括行的字符串值、行在文档中的位置信息、行的操作类型。其中操作类型有四种情况,分别是:行增加、行删除、行更改、行相同。遍历这个结果列表就可以得到从旧文档到新文档所做的内容变化。
步骤四:将差异比较的结果进行压缩并共享;
为了更少的占用网络传输带宽需要尽可能的降低数据传输量。采用数据压缩方法既可以加密原始数据,也可以减少数据量。文档的差异比较结果存放在一个列表中,首先,按顺序遍历列表中的每个元素,将列表序列化并将结果存放在内存空间中;接着采用无损压缩方法对内存中的数据进行压缩;最后将压缩后的数据通过网络传输到浏览终端,如果经过压缩后的数据尺寸超过了每次发送报文的尺寸,则需要对大的数据包进行拆分后发送。浏览终端接到数据后进行相反地操作,就可以实现文档内容的共享。
对于文档的浏览终端,还需要继续实施以下步骤:
步骤五:接收来自操作终端的更新包;
浏览终端监听网络接收端口,当有新的数据到达时,触发接收线程对网络数据进行接收。由于网络数据类型包括内容更新数据,还包括控制数据,需要首先对接收到的数据类型进行判断:如果是内容更新包数据,就对数据包的完整性做检验,为正确解压更新包做准备;如果不是内容更新包数据,就将接收到的数据交给消息处理线程作相应的处理。数据包完整性检验主要是检查接收到的数据大小是否与实际发送的数据大小相同,如果在发送端将一个大的数据包拆分成若干个小的报文发送,就需要接收端进行报文组合,只有在要求接收的数据包完全接收后才能够正确解压数据。
步骤六:解压更新包并与当前文档进行合并;
首先对接收到的压缩更新包进行解压操作,解压接收到的压缩更新包就是对接收到的压缩更新包进行解压操作;接着对解压后的数据进行分析,解压后的数据只是一段二进制的流数据,需要进行反序列化操作将其还原成结构化数据;然后重构差异比较结果列表,列表中的每个对象存储的信息包括操作类型、改动内容在文档中的位置信息;最后遍历列表中的行对象,根据行对象的操作类型和位置信息与当前文档内容进行合并,合并更新操作都是在内存文件中操作,根据合并完成后的内容做界面刷新就能够观看到最新的文档内容了。
图4为本发明从操作终端到浏览终端的Word文档共享效果图。在更新前,操作终端在文档中做编辑操作,在当前页面的中间输入了两行文字,浏览终端目前可以浏览文档内容,在操作终端做完远程更新后,浏览终端立刻可以看到操作终端输入的两行文字的内容,浏览终端的文档和操作终端的文档保持着同步更新。
图5为本发明从操作终端到浏览终端的Excel文档共享效果图。操作终端在文档中放入一个饼状分析图,在操作终端更新前,浏览终端看不到最新的分析图。当操作终端对文档编辑完成,做完远程更新后,在浏览终端立刻可以看到最新的饼状分析图。
Claims (4)
1.一种基于内容差异比较的文档共享方法,其特征在于,该方法同时包括操作终端和文档浏览终端两部分内容,具体如下,
对于操作终端,步骤有:
步骤一:共享文档初始化;
对需要共享的文档首先进行初始化操作,包括打开文档、保存文档、通过文件传输协议将该初始文档传输到浏览终端进行共享;
首先将一份完整的初始文档通过网络分发到各浏览终端进行初始化,以该初始化文档的内容作为更新的基点;初始化操作还包括保存文档内容,以二进制的格式将文档内容保存到内存文件中;
其中所述的内存文件是计算机在内存中开辟的一段存储空间,存储空间随着文档尺寸的增大而递增;
步骤二:等待文档内容的更改;
等待用户对文档的编辑操作,对共享的文档内容做各种编辑操作包括:增加文字、删除文字、修改格式、插入图片和图形;当文档的修改达到一定的量级触发保存操作,对更改后的文档进行步骤一中所述的保存文档,以二进制格式将修改后的文档保存到一个新的内存文件,为步骤三做准备;
步骤三:将更改后的文档与更改前的内容进行差异比较;
将更改前的内存文件和更改后的内存文件进行拆分,按照指定的关键词将内存文件拆分成块,记录每个文件块的尺寸、所在文档中的起始位置和结束位置,然后对每一个文件块进行差异比较,从而得到文档变化的内容;采用自定义的数据结构对变化的内容进行精确的记录;
文档拆分时首先选用文档拆分关键词,采用二进制方式打开文档所对应的内存文件,将文件读取指针指向文件头部,从文件头按位查找关键词,根据关键词将文件内容分割成多行字符串形式,将所得的行信息按照先后顺序保存到列表中;列表中的每个元素表示一行对象,行对象定义为:
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:获取累计哈希值
获得前n个字符的哈希值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-1位置的所有行对象都是新增的内容,将这些内容按顺序加入到结果列表中;如果位置P2和第二列表的当前位置标号相同,则第二列表中的当前位置的行对象内容同第一列表中当前位置的行对象内容相同,将比较结果记录到结果列表中;
第二种结果是在第二列表中没有找到值相同的行对象,则反过来做比较,用第二列表中当前行对象的值作为比较基准,在第一列表中进行查找,查找结果也有两种情况:如果在第一列表中找到值相同的行对象,记录该行在第一列表中的位置标号,设该位置为P1,若该位置比第一列表的当前行位置还大,则从第一列表的当前行位置开始到位置P1之前的所有行内容已经被删除,将比较的结果记录到结果列表中;如果在第一列表中没有找到值相同的行对象,则第二列表中当前行对象的内容是新增加的内容,将比较结果记录到结果列表中;
接着,改变第一列表的当前行对象为列表中的下一行,改变第二列表的当前行对象为列表中的下一行,使用第一列表的当前行对象的哈希值和字符串值作为基准,在第二列表中进行查找,重复上面所述的方法,直到处理完第一列表和第二列表中的所有行对象,获得文档内容差异的比较结果;
最后,比较的结果按顺序都保存到结果列表中,结果列表中的每个元素都是一个行结构对象,该行结构定义中包括行的字符串值、行在文档中的位置信息、行的操作类型;其中操作类型有四种情况,分别是:行增加、行删除、行更改、行相同;遍历这个结果列表就能够得到从旧文档到新文档所做的内容变化。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2010101312144A CN101807207B (zh) | 2010-03-22 | 2010-03-22 | 一种基于内容差异比较的文档共享方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2010101312144A CN101807207B (zh) | 2010-03-22 | 2010-03-22 | 一种基于内容差异比较的文档共享方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101807207A true CN101807207A (zh) | 2010-08-18 |
CN101807207B CN101807207B (zh) | 2011-10-26 |
Family
ID=42608999
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2010101312144A Expired - Fee Related CN101807207B (zh) | 2010-03-22 | 2010-03-22 | 一种基于内容差异比较的文档共享方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101807207B (zh) |
Cited By (25)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101963944A (zh) * | 2010-09-30 | 2011-02-02 | 用友软件股份有限公司 | 对象存储方法和系统 |
CN102023870A (zh) * | 2010-12-31 | 2011-04-20 | 深圳市普联技术有限公司 | 一种软件修改的检测方法、装置及电子设备 |
CN102567374A (zh) * | 2010-12-16 | 2012-07-11 | 北大方正集团有限公司 | 一种稿件校对方法及系统 |
CN102682127A (zh) * | 2012-05-16 | 2012-09-19 | 北京像素软件科技股份有限公司 | 一种数据版本的控制方法 |
CN103166992A (zh) * | 2011-12-14 | 2013-06-19 | 中国电信股份有限公司 | 应用于云存储的快速文件更新方法及系统 |
CN103309893A (zh) * | 2012-03-15 | 2013-09-18 | 阿里巴巴集团控股有限公司 | 一种字符串的比较方法及装置 |
CN103377251A (zh) * | 2012-04-27 | 2013-10-30 | 百度在线网络技术(北京)有限公司 | 用于hdfs的文件比较方法及装置 |
WO2014180233A1 (zh) * | 2013-10-17 | 2014-11-13 | 中兴通讯股份有限公司 | 一种实现资源共享的方法、装置及终端 |
CN104714933A (zh) * | 2013-12-12 | 2015-06-17 | 鸿合科技有限公司 | 一种文档编辑的处理方法和装置 |
CN104881466A (zh) * | 2015-05-25 | 2015-09-02 | 百度在线网络技术(北京)有限公司 | 数据分片的处理以及垃圾文件的删除方法和装置 |
CN103166992B (zh) * | 2011-12-14 | 2016-12-14 | 中国电信股份有限公司 | 应用于云存储的快速文件更新方法及系统 |
CN103838470B (zh) * | 2012-11-27 | 2017-03-01 | 联想(北京)有限公司 | 一种获取操作选项的方法及电子设备 |
CN106557974A (zh) * | 2016-11-21 | 2017-04-05 | 中国农业银行股份有限公司 | 一种imix协议数据的处理方法及系统 |
CN106844565A (zh) * | 2016-12-30 | 2017-06-13 | 上海帝联信息科技股份有限公司 | 数据行之间的字符比较方法及装置 |
CN107391478A (zh) * | 2017-08-15 | 2017-11-24 | 北京北信源软件股份有限公司 | 一种在线文档编辑方法与装置 |
CN107577770A (zh) * | 2017-09-06 | 2018-01-12 | 叶进蓉 | 一种对网页中的图片进行处理的方法及装置 |
CN107911359A (zh) * | 2017-11-10 | 2018-04-13 | 国信嘉宁数据技术有限公司 | 一种获取电子数据的方法 |
CN108809800A (zh) * | 2017-05-04 | 2018-11-13 | 腾讯科技(深圳)有限公司 | 一种多媒体数据处理方法及其设备、系统 |
CN108804542A (zh) * | 2018-05-16 | 2018-11-13 | 河北天翼科贸发展有限公司 | 一种基于内存运算的快速获取文件增量方法 |
CN109828985A (zh) * | 2018-12-27 | 2019-05-31 | 大唐软件技术股份有限公司 | 一种表单差异查询方法和装置 |
CN110442359A (zh) * | 2018-05-03 | 2019-11-12 | 大唐移动通信设备有限公司 | 一种对mib文档进行归并的方法及装置 |
CN111090982A (zh) * | 2018-10-24 | 2020-05-01 | 迈普通信技术股份有限公司 | 文本比较方法、装置、电子设备及计算机可读存储介质 |
CN112395852A (zh) * | 2020-12-22 | 2021-02-23 | 江西金格科技股份有限公司 | 多文件格式版式文档的对比方法 |
CN112950293A (zh) * | 2021-04-07 | 2021-06-11 | 华能四川水电有限公司 | 一种企业外部数据采集与分析系统 |
CN117591488A (zh) * | 2024-01-19 | 2024-02-23 | 北京奇虎科技有限公司 | 一种文件检测方法、装置、存储介质及电子设备 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1132372A (zh) * | 1994-12-14 | 1996-10-02 | 美国电报电话公司 | 对软件和数据的有效及安全的更新 |
US7203708B2 (en) * | 2003-11-06 | 2007-04-10 | Microsoft Corporation | Optimizing file replication using binary comparisons |
CN101290628A (zh) * | 2008-06-17 | 2008-10-22 | 中兴通讯股份有限公司 | 一种数据文件更新存储方法 |
CN101350009A (zh) * | 2008-09-05 | 2009-01-21 | 中国工商银行股份有限公司 | 一种协同文档编写系统 |
-
2010
- 2010-03-22 CN CN2010101312144A patent/CN101807207B/zh not_active Expired - Fee Related
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1132372A (zh) * | 1994-12-14 | 1996-10-02 | 美国电报电话公司 | 对软件和数据的有效及安全的更新 |
US7203708B2 (en) * | 2003-11-06 | 2007-04-10 | Microsoft Corporation | Optimizing file replication using binary comparisons |
CN101290628A (zh) * | 2008-06-17 | 2008-10-22 | 中兴通讯股份有限公司 | 一种数据文件更新存储方法 |
CN101350009A (zh) * | 2008-09-05 | 2009-01-21 | 中国工商银行股份有限公司 | 一种协同文档编写系统 |
Cited By (36)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101963944B (zh) * | 2010-09-30 | 2015-04-15 | 用友软件股份有限公司 | 对象存储方法和系统 |
CN101963944A (zh) * | 2010-09-30 | 2011-02-02 | 用友软件股份有限公司 | 对象存储方法和系统 |
CN102567374A (zh) * | 2010-12-16 | 2012-07-11 | 北大方正集团有限公司 | 一种稿件校对方法及系统 |
CN102023870A (zh) * | 2010-12-31 | 2011-04-20 | 深圳市普联技术有限公司 | 一种软件修改的检测方法、装置及电子设备 |
CN102023870B (zh) * | 2010-12-31 | 2013-07-24 | 深圳市普联技术有限公司 | 一种软件修改的检测方法、装置及电子设备 |
CN103166992B (zh) * | 2011-12-14 | 2016-12-14 | 中国电信股份有限公司 | 应用于云存储的快速文件更新方法及系统 |
CN103166992A (zh) * | 2011-12-14 | 2013-06-19 | 中国电信股份有限公司 | 应用于云存储的快速文件更新方法及系统 |
CN103309893A (zh) * | 2012-03-15 | 2013-09-18 | 阿里巴巴集团控股有限公司 | 一种字符串的比较方法及装置 |
CN103309893B (zh) * | 2012-03-15 | 2016-12-28 | 阿里巴巴集团控股有限公司 | 一种字符串的比较方法及装置 |
CN103377251A (zh) * | 2012-04-27 | 2013-10-30 | 百度在线网络技术(北京)有限公司 | 用于hdfs的文件比较方法及装置 |
CN103377251B (zh) * | 2012-04-27 | 2017-05-10 | 百度在线网络技术(北京)有限公司 | 用于hdfs的文件比较方法及装置 |
CN102682127A (zh) * | 2012-05-16 | 2012-09-19 | 北京像素软件科技股份有限公司 | 一种数据版本的控制方法 |
CN103838470B (zh) * | 2012-11-27 | 2017-03-01 | 联想(北京)有限公司 | 一种获取操作选项的方法及电子设备 |
WO2014180233A1 (zh) * | 2013-10-17 | 2014-11-13 | 中兴通讯股份有限公司 | 一种实现资源共享的方法、装置及终端 |
CN104714933A (zh) * | 2013-12-12 | 2015-06-17 | 鸿合科技有限公司 | 一种文档编辑的处理方法和装置 |
CN104714933B (zh) * | 2013-12-12 | 2018-01-05 | 鸿合科技有限公司 | 一种文档编辑的处理方法和装置 |
CN104881466A (zh) * | 2015-05-25 | 2015-09-02 | 百度在线网络技术(北京)有限公司 | 数据分片的处理以及垃圾文件的删除方法和装置 |
CN106557974A (zh) * | 2016-11-21 | 2017-04-05 | 中国农业银行股份有限公司 | 一种imix协议数据的处理方法及系统 |
CN106557974B (zh) * | 2016-11-21 | 2020-11-20 | 中国农业银行股份有限公司 | 一种imix协议数据的处理方法及系统 |
CN106844565A (zh) * | 2016-12-30 | 2017-06-13 | 上海帝联信息科技股份有限公司 | 数据行之间的字符比较方法及装置 |
CN106844565B (zh) * | 2016-12-30 | 2020-07-07 | 上海帝联信息科技股份有限公司 | 数据行之间的字符比较方法及装置 |
CN108809800A (zh) * | 2017-05-04 | 2018-11-13 | 腾讯科技(深圳)有限公司 | 一种多媒体数据处理方法及其设备、系统 |
CN107391478A (zh) * | 2017-08-15 | 2017-11-24 | 北京北信源软件股份有限公司 | 一种在线文档编辑方法与装置 |
CN107577770A (zh) * | 2017-09-06 | 2018-01-12 | 叶进蓉 | 一种对网页中的图片进行处理的方法及装置 |
CN107577770B (zh) * | 2017-09-06 | 2020-06-02 | 深圳市华晨旭悦科技有限公司 | 一种对网页中的图片进行处理的方法及装置 |
CN107911359A (zh) * | 2017-11-10 | 2018-04-13 | 国信嘉宁数据技术有限公司 | 一种获取电子数据的方法 |
CN110442359A (zh) * | 2018-05-03 | 2019-11-12 | 大唐移动通信设备有限公司 | 一种对mib文档进行归并的方法及装置 |
CN108804542B (zh) * | 2018-05-16 | 2021-12-07 | 河北天翼科贸发展有限公司 | 一种基于内存运算的快速获取文件增量方法 |
CN108804542A (zh) * | 2018-05-16 | 2018-11-13 | 河北天翼科贸发展有限公司 | 一种基于内存运算的快速获取文件增量方法 |
CN111090982A (zh) * | 2018-10-24 | 2020-05-01 | 迈普通信技术股份有限公司 | 文本比较方法、装置、电子设备及计算机可读存储介质 |
CN109828985B (zh) * | 2018-12-27 | 2021-06-25 | 大唐软件技术股份有限公司 | 一种表单差异查询方法和装置 |
CN109828985A (zh) * | 2018-12-27 | 2019-05-31 | 大唐软件技术股份有限公司 | 一种表单差异查询方法和装置 |
CN112395852A (zh) * | 2020-12-22 | 2021-02-23 | 江西金格科技股份有限公司 | 多文件格式版式文档的对比方法 |
CN112950293A (zh) * | 2021-04-07 | 2021-06-11 | 华能四川水电有限公司 | 一种企业外部数据采集与分析系统 |
CN117591488A (zh) * | 2024-01-19 | 2024-02-23 | 北京奇虎科技有限公司 | 一种文件检测方法、装置、存储介质及电子设备 |
CN117591488B (zh) * | 2024-01-19 | 2024-05-14 | 北京奇虎科技有限公司 | 一种文件检测方法、装置、存储介质及电子设备 |
Also Published As
Publication number | Publication date |
---|---|
CN101807207B (zh) | 2011-10-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101807207B (zh) | 一种基于内容差异比较的文档共享方法 | |
US9268716B2 (en) | Writing data from hadoop to off grid storage | |
CN103959256B (zh) | 基于指纹的数据重复删除 | |
Sharma et al. | Leading NoSQL models for handling Big Data: a brief review | |
CN104881466B (zh) | 数据分片的处理以及垃圾文件的删除方法和装置 | |
CN110019267A (zh) | 一种元数据更新方法、装置、系统、电子设备及存储介质 | |
CN104133882A (zh) | 一种基于hdfs的小文件处理方法 | |
CN102713848A (zh) | 用于使用轻量级客户端通过网络来与虚拟化计算服务对接的方法 | |
US20060129528A1 (en) | Database load reducing system and load reducing program | |
CN108848108A (zh) | 基于移动互联网+的创新项目pdca过程管理平台 | |
CN103778202A (zh) | 一种企业电子文档管理服务端及系统 | |
CN102508880A (zh) | 一种文件合并方法及分解方法 | |
CN104765840A (zh) | 一种大数据分布式存储的方法和装置 | |
CN101449462A (zh) | 基于集合关联高速缓存映射技术的高速数据压缩 | |
CN103678694A (zh) | 视频资源的倒排索引文件建立方法及其系统 | |
CN104794190A (zh) | 一种大数据有效存储的方法和装置 | |
CN104077310A (zh) | 加载资源文件的方法、设备和系统 | |
US20200212932A1 (en) | Reducing storage of blockchain metadata via dictionary-style compression | |
CN104750855A (zh) | 一种大数据存储优化方法和装置 | |
CN103425653A (zh) | 实现dicom影像二次检索的方法及系统 | |
CN104917786A (zh) | 一种节省客户端和服务器交互时的传输流量的方法和模块 | |
Zhang et al. | Deep multimodal clustering with cross reconstruction | |
CN102567419A (zh) | 基于树结构的海量数据存储装置及方法 | |
US11249974B1 (en) | Partition key/value pair sorting and splitting techniques | |
CN101419618B (zh) | 一种内文信息的显示方法、系统及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20111026 Termination date: 20210322 |