一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

使用将未压缩/已压缩内容相关的索引的压缩/解压缩的制作方法

2023-02-06 10:12:45 来源:中国专利 TAG:

使用将未压缩/已压缩内容相关的索引的压缩/解压缩


背景技术:

1.在信息时代,存储和传送数据的能力至关重要。尽管如此,我们实际存储和传送大量数据的能力将总是有限的。因此,在存储或传送之前,可以将使用以较大数目的比特的一种格式(即,未压缩数据)表示的信息通常编码为使用较少数目的比特的形式(即,已压缩形式)。然而,执行压缩和解压缩也需要一些时间和处理能力。
2.通常,可以通过消除信息中的冗余来实现压缩。作为示例,如果文本文件正在被压缩,则某些词或短语很可能重复出现在未压缩文本文件中。例如,在本专利申请中,某些词将以不同频率重复。压缩可以涉及使用词典,该词典用较小的非人类可读替换来替换某些常用的人类可读文本序列。另一种方法是使用已压缩形式的文字文本和复制指令的组合。作为示例,lz4压缩方法通过将文本替换为来自未压缩文本的先前部分的文字和复制指令的组合来进行压缩。
3.本文中的所要求保护的主题不限于解决任何缺点或仅在诸如上述环境的环境中操作的实施例。相反,提供该背景技术仅是为了说明可以在其中实践本文中所描述的一些实施例的一个示例性技术领域。


技术实现要素:

4.提供本发明内容是为了以简化形式介绍一系列概念,下面在具体实施方式中进一步描述这些概念。本发明内容不旨在确定所要求保护的主题的关键特征或必要特征,也不旨在被用作确定所要求保护的主题的范围的辅助。
5.本文中所描述的原理涉及以允许对未压缩数据的任意部分的直接重构的方式进行数据压缩。进行常规的压缩,使得解压缩必须从数据的最开始处开始,或者在数据内以特定较大间隔(例如,在块边界——每64千字节)开始。然而,本文中所描述的原理允许解压缩在已压缩数据内的任何点处开始,而不必解压缩数据的任何先前部分。因此,本文中所描述的原理允许对已压缩数据的快速随机访问。根据本文中所描述的原理,这是使用将未压缩数据内的位置与已压缩数据内的位置相关的索引而被实现的。
6.附加的特征和优点将在以下的描述中进行阐述,并且根据该描述将部分地显而易见,或者可以通过本文中的教导的实践而被获知。本发明的特征和优点可以通过所附权利要求中特别指出的工具和组合来实现和获得。本发明的特征将通过以下描述和所附权利要求而变得更加清楚明白,或者可以通过如下文中所阐述的本发明的实践而被获知。
附图说明
7.为了描述可以获得上面所记载和其他的优点和特征的方式,将参考附图中所图示的具体实施例来对上面简要描述的主题进行更具体的描述。理解这些附图仅描述了典型的实施例并因此不应当被认为是对范围的限制,将通过使用附图以附加的具体细节来描述和解释实施例,在附图中:
8.图1图示了可以在其中采用本文中所描述的原理的示例计算系统;
9.图2图示了根据本文中所描述的原理的用于压缩以允许对未压缩数据的任意部分的重构的方法的流程图;
10.图3图示了压缩和解压缩可以在其中发生的环境,该环境在描述图2的压缩时会经常提及;
11.图4示出了与图3的环境相似的环境,不同之处在于,已压缩数据被示出为具有多个连续已压缩段作为已压缩数据的示例;
12.图5图示了与图4的环境相似的环境,不同之处在于,已压缩段被图示为包括文字部分和复制指令部分,复制指令部分指示从先前或当前已压缩段复制;
13.图6图示了根据本文中所描述的原理的用于解压缩已压缩数据的任意部分的方法的流程图。
14.图7a图示了示例已压缩段,其用于描述第一示例中的解压缩,其中未压缩数据的一个任意部分被访问;以及
15.图7b图示了示例已压缩段,其用于描述第二示例中的解压缩,其中未压缩数据的另一任意部分被访问。
具体实施方式
16.本文中所描述的原理涉及以允许对未压缩数据的任意部分的直接重构的方式进行数据压缩。进行常规的压缩,使得解压缩必须从数据的最开始处开始,或者在数据内以特定较大间隔(例如,在块边界——每64千字节)开始。然而,本文中所描述的原理允许解压缩在已压缩数据内的任何点处开始,而不必解压缩数据的任何先前部分。因此,本文中所描述的原理允许对已压缩数据的快速随机访问。根据本文中所描述的原理,这是使用将未压缩数据内的位置与已压缩数据内的位置相关的索引来实现的。
17.无论使用何种压缩技术,压缩都会跟踪未压缩数据中的至少一些位置与已压缩数据中的对应位置之间的相关性。压缩然后构造索引,该索引记录未压缩数据中的位置与已压缩数据中的对应位置之间的相关性。包括这些相关性的索引被构造并且与已压缩数据相关联,使得该索引可用于从索引和已压缩数据对未压缩数据的任意部分的构造。例如,索引可以包括未压缩数据中每个规则字节间隔的条目(例如,对于256的倍数的每个未压缩字节地址位置)。
18.作为示例,在一个实施例中,压缩一次一个已压缩段地发生,使得已压缩数据包括已压缩段序列。在这种情况下,索引可以包括(对于每如此多未压缩字节)已压缩段的标识以及表示该信息的该已压缩段内的未压缩偏移(例如,段部分23,5个未压缩字节)。
19.这允许在解压缩期间在要访问的未压缩数据的任何定义的起始位置处进行随机访问。给定起始位置,解压缩使用索引来标识已压缩数据中的对应位置。解压缩然后导航到该位置,并且从那里遍历适当数目的另外的未压缩字节,以找到要访问的未压缩部分的开始。解压缩然后开始解压缩,直到适当大小的未压缩部分被形成。
20.作为示例,假定要访问的未压缩数据是从未压缩字节8250到未压缩字节8160(所以11个未压缩字节长)。进一步假定压缩数据由已压缩段序列组成,并且存在256个未压缩字节的规则间隔的索引条目。解压缩将使用未压缩字节地址8192的索引条目来标识与未压缩字节位置8192相对应的已压缩段和未压缩字节偏移。假定该索引条目标识已压缩段23和
5个未压缩字节。解压缩将获得已压缩段23,并且从已压缩段的开始遍历63个字节(可能到达后续已压缩段)以到达起始位置。然后,解压缩将从该位置再解压缩11个未压缩字节,以提取期望部分。
21.因为本文中所描述的原理是在计算系统的上下文中执行的,因此将关于图1描述计算系统的一些介绍性讨论。计算系统现在越来越多地采用多种形式。例如,计算系统可以是手持设备、电器、膝上型计算机、台式计算机、大型机、分布式计算系统、数据中心、或者甚至不被常规地认为是计算系统的设备,诸如可穿戴设备(例如,眼镜)。在本描述和权利要求书中,术语“计算系统”被广义地定义为包括具有至少一个物理有形处理器、以及物理有形存储器的任何设备或系统(或者,其组合),该物理有形存储器能够在其上具有由处理器可执行的计算机可执行指令。存储器可以采用任何形式,并且可以取决于计算系统的性质和形式。计算系统可以分布在网络环境中并且可以包括多个组成计算系统。
22.如图1中所图示的,在其最基本配置中,计算系统100包括至少一个硬件处理单元102和存储器104。处理单元102包括通用处理器。尽管不是必需的,但是处理单元102还可以包括现场可编程门阵列(fpga)、专用集成电路(asic)或任何其他专用电路。在一个实施例中,存储器104包括物理系统存储器。该物理系统存储器可以是易失性、非易失性或这两者的某种组合。在第二实施例中,存储器是非易失性大容量存储装置,诸如物理存储介质。如果计算系统是分布式的,则处理、存储器和/或存储能力也可以是分布式的。
23.计算系统100在其上还具有通常被称为“可执行组件”的多个结构。例如,计算系统100的存储器104被图示为包括可执行组件106。术语“可执行组件”是计算领域的本领域普通技术人员熟知的结构的名称,其是可以是软件、硬件或其组合的结构。例如,当以软件实现时,本领域普通技术人员将理解,可执行组件的结构可以包括可以在计算系统上执行的软件对象、例程、方法(等)。这样的可执行组件存在于计算系统的堆、计算机可读存储介质或组合中。
24.本领域普通技术人员将认识到,可执行组件的结构存在于计算机可读介质上,使得在由计算系统的一个或多个处理器(例如,由处理器线程)解释时,计算系统被引起执行功能。这样的结构可以由处理器直接计算机可读取(在可执行组件是二进制时就是这种情况)。备选地,该结构可以被结构化为可解释和/或编译(无论是在单个阶段还是在多个阶段中),从而生成处理器直接可解释的这样的二进制文件。当使用术语“可执行组件”时,对可执行组件的示例结构的这样的理解完全在计算领域的普通技术人员的理解范围内。
25.术语“可执行组件”也被普通技术人员很好地理解为包括诸如硬编码或硬连线逻辑门之类的结构,该结构排他性地或几乎排他性地以硬件实现,诸如在现场可编程门阵列(fpga)、专用集成电路(asic)或任何其他专用电路内。因此,术语“可执行组件”是计算领域的普通技术人员很好理解的结构的术语,而无论以软件、硬件或组合实现。在本描述中,还可以使用术语“组件”、“代理”、“管理器”、“服务”、“引擎”、“模块”、“虚拟机”等。如在本描述和案例中所使用的,这些术语(无论是否带有修饰条款)也旨在与术语“可执行组件”同义,并且因此也具有计算领域的普通技术人员可以很好理解的结构。
26.在以下的描述中,参考由一个或多个计算系统执行的动作来描述实施例。如果这样的动作以软件实现,则(执行该动作的相关计算系统的)一个或多个处理器响应于已执行构成可执行组件的计算机可执行指令而指导计算系统的操作。例如,这样的计算机可执行
指令可以在形成计算机程序产品的一个或多个计算机可读介质上具体实施。这样的操作的一个示例涉及数据的操纵。如果这样的动作排他性地或接近排他性地以硬件(诸如,在fpga或asic内)实现,则计算机可执行指令可以是硬编码或硬连线逻辑门。计算机可执行指令(和经操纵的数据)可以存储在计算系统100的存储器104中。计算系统100还可以包含允许计算系统100通过例如网络110与其他计算系统通信的通信信道108。
27.虽然并非所有计算系统都需要用户接口,但是在一些实施例中,计算系统100包括用于与用户交互的用户接口系统112。用户接口系统112可以包括输出机制112a以及输入机制112b。本文中所描述的原理不限于精确的输出机制112a或输入机制112b,这是由于这样将取决于设备的性质。然而,输出机制112a可以包括例如扬声器、显示器、触觉输出、虚拟或增强现实、全息图等。输入机制112b的示例可以包括例如麦克风、触摸屏、虚拟或增强现实、全息图、相机、键盘、鼠标或其他指针输入、任何类型的传感器等。
28.本文中所描述的实施例可以包括或利用专用或通用计算系统,该计算系统包括诸如以下项的计算机硬件,例如一个或多个处理器和系统存储器,如下面更详细讨论的那样。本文中所描述的实施例还包括用于携带或存储计算机可执行指令和/或数据结构的物理和其他计算机可读介质。这样的计算机可读介质可以是通用或专用计算系统可以访问的任何可用介质。存储计算机可执行指令的计算机可读介质是物理存储介质。承载计算机可执行指令的计算机可读介质是传输介质。因此,作为示例而非限制,本发明的实施例可以包括至少两种截然不同的计算机可读介质:存储介质和传输介质。
29.计算机可读存储介质包括ram、rom、eeprom、cd-rom或其他光盘存储、磁盘存储或其他磁存储设备、或者可以用于以计算机可执行指令或数据结构的形式存储期望的程序代码装置并且可以由通用或专用计算系统访问的任何其他物理的有形存储介质。
[0030]“网络”被定义为能够在计算系统和/或模块和/或其他电子设备之间传输电子数据的一个或多个数据链路。当信息通过网络或另一通信连接(硬连线、无线或硬连线或无线的组合)传输或提供给计算系统时,计算系统适当地将连接视为传输介质。传输介质可以包括可以用于以计算机可执行指令或数据结构的形式携带期望的程序代码装置并且可以由通用或专用计算系统访问的网络和/或数据链路。上述各项的组合也应被包括在计算机可读介质的范围内。
[0031]
此外,在到达各种计算系统组件时,计算机可执行指令或数据结构形式的程序代码装置可以自动地从传输介质传输到存储介质(或者,反之亦然)。例如,通过网络或数据链路接收的计算机可执行指令或数据结构可以缓存在网络接口模块(例如,“nic”)内的ram中,并且然后最终传输到计算系统ram和/或计算系统处的不易失性存储介质。因此,应理解,存储介质可以被包括在也(或者,甚至主要)利用传输介质的计算系统组件中。
[0032]
例如,计算机可执行指令包括当在处理器处执行时引起通用计算系统、专用计算系统或专用处理设备执行特定功能或功能组的指令和数据。备选地或另外地,计算机可执行指令可以将计算系统配置为执行特定功能或功能组。例如,计算机可执行指令可以是二进制文件、或者甚至在由处理器直接执行之前经过一些转换(诸如,编译)的指令,诸如中间格式指令(诸如,汇编语言)、或者甚至源代码。
[0033]
尽管已以特定于结构特征和/或方法动作的语言描述了主题,但是应当理解,在所附权利要求中定义的主题不一定限于上述描述的特征或动作。相反,所描述的特征和动作
被公开作为实现权利要求的示例形式。
[0034]
本领域技术人员将理解,可以在具有多种类型的计算系统配置的网络计算环境中实践本发明,包括个人计算机、台式计算机、膝上型计算机、消息处理器、手持设备、多处理器系统、基于微处理器或可编程的消费电子产品、网络pc、小型计算机、大型计算机、移动电话、pda、寻呼机、路由器、交换机、数据中心、可穿戴设备(诸如,眼镜)等。本发明还可以在分布式系统环境中实践,其中通过网络(通过硬连线数据链路、无线数据链路或通过硬连线和无线数据链路的组合)链接的本地和远程计算系统都执行任务。在分布式系统环境中,程序模块可以位于本地和远程存储器存储设备中。
[0035]
本领域技术人员还将理解,本发明可以在云计算环境中实践。云计算环境可以是分布式的,但是这不是必需的。当是分布式时,云计算环境可以在一个组织内国际分布和/或具有跨多个组织而拥有的组件。在本描述和所附权利要求书中,“云计算”被定义为用于启用对可配置计算资源(例如,网络、服务器、存储装置、应用和服务)的共享池的按需网络访问的模型。“云计算”的定义不限于在正确部署时可以从这样的模型获得的其他众多优势中的任何一个。
[0036]
对于本文中所公开的过程和方法,可以以不同的顺序实现在过程和方法中执行的操作。此外,所概述的操作仅作为示例提供,操作中的一些可以是可选的,可以组合成更少的步骤和操作,使用另外的操作进行补充,或者扩展成附加操作,而不偏离所公开的实施例的本质。
[0037]
根据本文中所描述的原理,描述了一种允许从已压缩数据访问未压缩数据的任意部分的机制。该机制的一部分涉及未压缩数据被压缩的方式,这关于图2至图5通过示例的范式进行面描述。此后,接着将关于图6至图7b描述从已压缩数据访问未压缩数据的一部分的机制。
[0038]
首先,描述压缩。图2图示了根据本文中所描述的原理的用于压缩以允许对未压缩数据的任意部分的重构的方法200的流程图。图3图示了压缩和解压缩可以在其中发生的环境300,环境300在描述图2的压缩时会经常提及。作为示例,图2的解压缩可以由计算系统执行,诸如图1的计算系统100。在这种情况下,方法200可以由可执行组件执行,诸如图1的可执行组件106。
[0039]
该方法包括从未压缩数据生成已压缩数据(动作201),并且在这样做的同时,跟踪未压缩数据中的至少一些位置与已压缩数据中的对应位置之间的相关性(动作202)。压缩还构造索引,该索引记录这些相关性(动作203)。压缩还将索引与已压缩数据相关联(动作204),使得索引在解压缩期间可用。解压缩然后可以使用索引从已压缩数据重构未压缩数据的任意部分。
[0040]
作为示例,在图3中,未压缩数据310被压缩成已压缩数据320。已压缩数据310可以是文件、数据库、或者适合访问数据结构任意部分的任何其他数据结构。此外,压缩公式化了已压缩数据310的位置与对应已压缩位置之间的相关性的索引330。
[0041]
作为示例,索引330包括相关性条目331,相关性条目331包括条目331a到331n,条目331a到331n将未压缩数据310内的相应未压缩位置a到n与已压缩数据320内的对应已压缩位置相关。索引330与已压缩数据320相关联,如线321所表示的那样。将未压缩数据310压缩成已压缩数据320和相关联的索引330通常由箭头311表示。另一方面,从已压缩数据320
和相关联的索引330中解压缩未压缩数据310的任意部分通常由箭头312表示。已压缩数据320与索引330的组合完全表示未压缩数据310的内容,尽管是压缩形式。
[0042]
在一个示例中,未压缩数据的固定间隔的位置存在相关性。例如,图3图示了在未压缩数据310中以固定间隔有若干位置a到n。在一个实施例中,固定间隔被隔开固定量,该量落在2^6与2^9个未压缩字节之间(包括端值)。将固定间隔设为未压缩字节的二进制幂(即,2^m,其中“m”是整数)是有利的。这将允许解压缩使用未压缩字节地址中的最高有效比特(除m个最低有效比特之外的所有比特)快速找到与索引330内的任何未压缩字节地址相对应的适当条目。这也将允许解压缩使用m个最低有效比特快速找到距离间隔边界的未压缩字节偏移。
[0043]
在一个简单的示例中,如果间隔是每32(2^5)个未压缩字节,并且总共只有8(2^3)个间隔,则每个未压缩字节可以使用单个8比特数字唯一地标识。如果未压缩字节地址为二进制101001100,则三个最高有效比特101可以用于确定未压缩字节在第六(101)间隔内(即,000将是第一间隔),并且在该间隔内处于第七未压缩字节(00110)未压缩字节处(注意,00000将是该间隔中的第一未压缩字节)。因此,使用二进制幂的间隔有助于在解压缩期间快速使用索引。
[0044]
在一个更具体的实施例中,固定间隔在2^6与2^9个未压缩字节之间(包括端值)。小于2^6个未压缩字节的固定间隔将导致索引占未压缩数据大小的很大百分比,从而与实现良好压缩比的目标背道而驰。作为示例,如果每个索引条目是两个字节,并且未压缩间隔是32(或者,2^5)个未压缩字节,则索引大约是原始数据大小的15%,并且这只是索引的大小。另一方面,如果间隔是1024(或者,2^10)个未压缩字节,则到达与间隔开始相对应的已压缩位置所需要的未压缩字节的平均数(最大1024字节,但是平均约512字节)将很大,从而增加访问未压缩数据的任意部分的延迟。因此,固定间隔是2^6与2^9之间的未压缩字节的二进制幂。固定间隔的2^7或2^8个未压缩字节范围的中心部分可以提供平衡压缩比和解压缩延迟的最佳点。
[0045]
图4示出了与图3的环境300相似的环境400,不同之处在于,环境400示出了已压缩数据420作为已压缩数据320的示例。已压缩数据420包括已压缩段序列430。虽然该序列430可以包括任何数目的已压缩段,但是仅作为示例和说明,序列430被示出为包括已压缩段431至437。在这种情况下,相关性条目331a到331d中的每个相关性条目可以包括已压缩段的标识和未压缩偏移。每个已压缩段压缩一系列未压缩字节。未压缩字节偏移表示该范围内的未压缩字节位置。作为示例,已压缩段23可以表示从未压缩字节地址8187到8264的信息的已压缩形式。如果索引条目用于未压缩字节位置8192(它是256的倍数),则未压缩偏移将表示从开始的第五字节,因为8192减去8187等于5。
[0046]
在本文中,已压缩段的“标识”是在已压缩段序列中唯一地标识已压缩段的任何值。作为示例,该值可以是已压缩段的开始的地址。因此,在本描述和权利要求书中,已压缩段的“标识”足够广泛,以涵盖唯一地标识已压缩段的所有方式,包括已压缩段的地址。使用地址作为标识符是有利的,因为一旦标识符地址已知,就可以获得已压缩段而无需进一步查找另一地址。
[0047]
图5图示了与图4的环境400相似的环境500,不同之处在于,环境500将已压缩数据520作为已压缩数据420的示例,并且将已压缩段531至537作为相应已压缩段431至437的示
例。在图5的示例中,已压缩段531至537中的至少一些已压缩段中的每个已压缩段包括文字部分(在图5中被表示为未填充的已压缩段的部分)和复制指令部分(在图5中被表示为具有向左倾斜哈希标记的已压缩段的部分)。
[0048]
文字部分包括未压缩数据的文字未压缩字节。这些部分没有发现大量冗余信息可用于压缩数据。在图5中,已压缩段531至537中的每个已压缩段包括文字部分,该文字部分构成从未压缩数据复制的字节。例如,已压缩段531完全是文字部分,并且已压缩段532至537每个包括相应文字部分532a至537a。
[0049]
复制指令部分包括用以从已压缩段序列中的一个或多个先前已压缩段的一个或多个字节范围复制的指令。复制指令部分提供用以在解压缩期间将遵循的复制指令,并且包括要复制的已压缩数据中的位置以及要复制的字节数目。由于复制指令的表示比为了解压缩而复制的字节更紧凑,因此该复制指令部分使得压缩能够进行。在所图示的示例中,已压缩段532至537包括对应复制指令部分532b至537b。作为示例,如箭头540所表示的,已压缩段536的复制指令部分536b包括从已压缩段434复制的指令。因此,在图5的示例中,在一次一个地压缩每个已压缩段期间,压缩查找已压缩数据中的冗余信息,并且用复制指令表示该信息,而不是包括所有的这些字节。
[0050]
现在将描述未压缩数据为文本的示例。假定要压缩以下文本。
[0051][0052]
这可能会如以下表1中那样被压缩,其中每一行表示不同已压缩段,并且左列表示文字,而右列表示通过从先前已压缩段(以表格形式表示时更高的行)或从当前已压缩段的文字部分复制而被形成的文本。
[0053]
文字复制[{“name”:“scott”,“city“:“redmond“,“lastsignedon“:“2020-05-05”},{“name”:“amy“,“city”:“salt lake city”,”lastsignedon”:“2020-04-25“},
[0054]
表1
[0055]
复制指令部分指示从已压缩段序列中的一个或多个先前已压缩段复制。然而,压缩确保可以从其复制字节的一个或多个先前已压缩段在已压缩段序列中不早于预定字节数目。例如,复制中的这种限制在图5中用括号550表示。可以将预定字节数目保持得足够低,以便可以在单个读取请求中从序列530中读取字节,从而实现更快的解压缩。此外,这允
许解压缩过程被绑定。顺便提及,智能压缩器可以通过将文字“lastsignedon”:“2020-05-05”,},放在更早的位置来提高压缩率,使得它以后可以复制该文字的可重用部分。
[0056]
在一个实施例中,预定字节数目是二进制幂(即,大小为2^n,其中“n”是整数)。“n”越低,压缩的机会就越少,但是为了压缩和解压缩,保持字节数目所需要的存储器就越少。另一方面,“n”越高,压缩的机会就越多,但是压缩和解压缩所需要的存储器就越多。如果“n”非常高,则在对未压缩数据的任意部分的任何给定重构期间,可以需要多个读取请求来访问已压缩数据。因此,压缩比与存储器使用和访问延迟之间存在平衡。在一个实施例中,“n”至少为10以确保良好的压缩比。在另一实施例中,“n”最多为15,以确保在单个读取请求期间存储器的填充。在另一实施例中,“n”是在10到15之间的整数(包括端值)。
[0057]
尽管本文中所描述的原理将每个已压缩段示出为包括最多一个文字部分和一个复制指令部分,但是在一些实施例中,已压缩部分可以包括多个文字和复制指令部分,或者可以包括零个文字部分(仅(多个)复制指令部分)或零个复制指令部分(仅(多个)文字部分)。然而,对于解压缩可以标识文字部分与复制指令部分之间的边界的每个部分,都使用了足够的报头信息。因此,给定未压缩字节地址,解压缩过程仍然可以遍历已压缩段,以计数其遍历的未压缩字节,以便找到开始解压缩的适当位置。
[0058]
既然已关于图2至图5描述了示例压缩机制,现在将关于图6描述解压缩方法。图6图示了根据本文中所描述的原理的用于解压缩已压缩数据的任意部分的方法600的流程图。作为示例,图6的解压缩可以由计算系统执行,诸如图1的计算系统100。在这种情况下,方法600可以由可执行组件执行,诸如图1的可执行组件106。
[0059]
解压缩可以从未压缩数据的所标识的起始位置开始进行。因此,方法600开始于标识要访问的未压缩数据的一部分的起始位置(动作601)。与这个起始位置必须位于未压缩数据的开始或任何给定块的开始不同,起始位置可以来自未压缩数据中的任何字节。因此,所标识的起始位置可以是未压缩数据的字节地址。
[0060]
方法600还包括访问与已压缩数据相关联的索引(动作602)。该索引在已压缩数据中的位置与未压缩数据中对应位置之间进行相关。在图3至图5的示例中,该索引是索引330,索引330包括已压缩数据310的位置a至n与图3的已压缩数据320、图4的已压缩数据420与图5的已压缩数据520内的对应位置之间的相关性331a至331n。起始位置的标识(动作601)与索引的访问(动作602)之间没有时间依赖性。因此,动作601和602被并行示出。
[0061]
解压缩方法600过程然后找到索引内的相关性,该相关性包括未压缩数据中的对应位置,该对应位置在要访问的未压缩数据的部分的所标识的起始位置之前(动作603)。解压缩方法600然后使用该相关性来在已压缩数据中找到与要访问的未压缩数据的部分的所标识的起始位置相对应的确切位置(动作604)。从那里,解压缩方法600从所找到的确切位置解压缩,直到未压缩数据的整个部分被解压缩(动作605)。解压缩过程的结束不需要在已压缩数据的结束处,也不需要在块之间的任何边界处。相反,正在访问的未压缩文件的部分的结尾可以是任何字节地址。因此,未压缩数据的任意部分可以从已压缩数据直接访问。
[0062]
这可以通过一个示例最佳地说明。假定索引的结构包括以下表2中的信息。
[0063][0064][0065]
表2
[0066]
该示例包括每256个未压缩字节的条目,并且说明了如何到达已压缩部分中的对应位置。具体地,为了到达与条目的未压缩字节地址相对应的特定已压缩位置,该过程将从所标识的已压缩段开始,然后遍历一定数目的未压缩字节。
[0067]
第一示例
[0068]
在第一示例中,要访问的未压缩数据的任意部分是从未压缩字节地址1806开始的6个字节。因此,要从其开始解压缩的未压缩字节的地址被标识为未压缩字节位置1806(动作601)。基于该未压缩字节地址起始位置,解压缩然后使用索引(例如,来自表2的信息)来标识未压缩数据中的对应位置,该对应位置在要访问的未压缩数据的部分的所标识的起始位置之前(动作603)。在该示例中,未压缩字节地址1792刚好在所标识的起始未压缩地址1806之前。
[0069]
因此,使用与未压缩字节地址1792相关的条目来查找已压缩数据中与未压缩字节地址1806的所标识的起始位置相对应的确切位置(动作604)。参考表1,解压缩可以标识未压缩字节地址1792(并因此已压缩段29)位于与所标识的起始位置相对应的确切位置处或刚好在其之前(动作521)(未压缩字节位置1806)。
[0070]
此外,由于解压缩必须将4个未压缩字节遍历到已压缩段中以到达与未压缩字节地址1792相对应的位置,并且由于起始位置字节地址1806甚至是超过该位置的14个未压缩字节,解压缩确定将18个字节遍历到已压缩段29中以到达解压缩的确切起始位置。“遍历”已压缩数据中的未压缩字节表示解压缩统计它遇到的未压缩字节数目,但是不需要实际知道那些遍历的未压缩字节是什么。因此,这样的遍历不需要实际解压缩任何内容。
[0071]
为了遍历包括复制指令部分的已压缩段,解压缩过程将在当前已压缩段之前加载预定数目的字节(参见图5的括号550)。从那时起,解压缩将应用于接下来的6个字节。如果解压缩涉及解释复制指令部分,则加载的预定字节数目(参见图5的括号550)也将有助于解压缩。
[0072]
图7a更详细地图示了示例已压缩段29,并且将用于说明第一示例。在该示例中,已压缩段29包括在压缩期间直接从未压缩数据310复制的30个字节的文字字节29a、以及10个附加字节的复制指令29b(从字节30到字节40)。如前所述,在该示例中,已压缩段具有未压缩字节地址1792,未压缩字节地址1792与进入已压缩部分29的4字节的信息相对应,其与进入地址部分的文字部分29a的4字节的信息相同,如垂直线601a所表示的那样。此外,为了得到与解压缩从其开始的信息相对应的未压缩字节地址1806,解压缩实际上将18个字节(4字节加上14字节)遍历到已压缩段29中,这与如进入文字部分29a的18个字节的信息相同,如垂直线602a所标识的那样。该垂直线(在文字部分29a中的字节地址18处)是解压缩开始的确切位置。
[0073]
因此,解压缩继续进行以从文字部分29a中的字节18(从线602a)复制字节。此外,由于接下来的六个字节的信息恰好都在文字部分29a内,所以对六个字节的未压缩数据的解压缩只涉及从已压缩段29的文字部分29b的字节18到24的复制。这些字节在图6a中由线602a和603a之间的向左倾斜的线填充的区域表示。
[0074]
第二示例
[0075]
第一示例非常简单,这是由于从已压缩数据中随机访问的所有的未压缩字节恰好都是首先从未压缩数据中直接文字复制的字节。第二示例稍微复杂一些,并且将涉及通过从文字部分29a复制以及部分地遵循已压缩段29的复制指令部分29b中的复制指令来解压缩。
[0076]
在第二示例中,要开始解压缩的未压缩字节地址被标识为未压缩字节地址1806(动作601),与第一示例相同。然而,要访问的未压缩部分现在是40个未压缩字节长。与第一示例中相同,解压缩遍历到已压缩段29中的位置18字节,以开始解压缩,再次如线602a所示。因此,通过复制已压缩段29的文字部分29a的剩余部分(从字节18到字节30),可以简单地解压缩前12个未压缩字节。
[0077]
然而,仍有28个未压缩字节需要从已压缩部分进行解压缩,以便总共40个未压缩字节。因此,解压缩遵循复制指令部分29b的复制指令。在该示例中,假定复制指令指示从先前的已压缩段的特定位置复制44个字节。如图6b中所图示的,复制部分29c表示字节30至74,如果已压缩部分29被全部解压缩,则这些字节30至74将被复制(因此,已压缩部分的40个字节加上一些报头,将解压缩为74个未压缩字节)。然而,由于只需要另外28个未压缩字节(在线603b处结束),解压缩仅遵循关于前28个字节(从字节30到字节58)的复制指令。
[0078]
第三示例
[0079]
在第三示例中,开始的未压缩字节位置是未压缩字节位置1846。解压缩首先从未压缩字节1792寻找54个未压缩字节,或者换言之,从已压缩段29的开始寻找58个未压缩字节。从第二示例的讨论中可以明显看出,解压缩将从在复制部分29c中找到的未压缩字节58开始。如果要获得十个未压缩字节,则将从复制部分29c获得未压缩字节58至68。如果要获得20个未压缩字节,则将获得所有剩余的未压缩字节58至74,作为解压缩这20个字节中的
16个字节的一部分,然后将复制下一已压缩段30的文字部分的前4个字节以完成提取。
[0080]
因此,本文中所描述的原理允许访问压缩数据的任何位置,而不必解压缩已压缩数据的任意部分,除了压缩数据中实际包含要以未压缩形式访问的信息的部分。因此,本文中所描述的原理允许随机访问已压缩数据,为已压缩数据开辟了全新的技术用途。
[0081]
在不背离本发明的精神或特征的情况下,本发明可以以其他特定形式具体实施。所描述的实施例在所有方面都被认为仅是说明性的而不是限制性的。因此,本发明的范围由所附权利要求而不是由前述描述指示。在权利要求的等效含义和范围内的所有变化都应当被涵盖在其范围内。
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献