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

就地安全解压缩的制作方法

2021-10-15 22:31:00 来源:中国专利 TAG:

就地安全解压缩
1.背景
2.数据文件的解压缩通常需要分配第一存储器缓冲区来存储经压缩输入数据流并分配单独的存储器来接收经解压缩输出流。尽管以此方式使用两个单独的存储器缓冲区防止读取流(经压缩数据)被写入流(经解压数据)潜在地盖写,但此双缓冲区存储器分配占用的存储器远远多于任何给定时间实际使用的存储器,从而降低了支持其他功能的系统能力。
3.附图简述
4.图1例示了根据两种不同方法对经压缩数据流执行就地解压缩的示例系统。
5.图2例示了用于计算促进就地安全数据解压缩的就地安全(ips)偏移的示例系统。
6.图3例示了由系统执行的计算可用于调整存储器缓冲区大小的ips偏移以保证经压缩数据流的就地安全解压缩的示例操作。
7.图4例示了用于确定可用于调整存储器缓冲区大小的ips偏移以保证经压缩数据流的就地安全解压缩的示例操作。
8.图5例示了用于使用存储的ips偏移值来解压缩数据的示例操作。
9.图6例示了可以适合于实现所公开技术的各方面的处理设备的示例示意图。


技术实现要素:

10.一种就地安全解压缩的方法包括处理指令以解压缩与就地安全(ips)偏移相关联地存储的经压缩数据流。ips偏移表示在经压缩数据流被就地解压缩时输出流的写入指针位置超过对应输入流的读取指针位置的最大偏移。根据ips偏移和输出流的大小来分配存储器缓冲区,并且经压缩数据流的数据在经分配的存储器空间内被就地解压缩。
11.提供本概述以便以简化的形式介绍以下在详细描述中进一步描述的概念的选集。本概述并不旨在标识所要求保护的主题的关键特征或必要特征,也不旨在用于限制所要求保护的主题的范围。这些以及各种其他特征和优点将通过阅读以下详细描述而变得显而易见。
12.详细描述
13.一些专门的算法被编写为“就地安全”,这意味着它们被设计成不使用辅助数据结构来变换输入。但是,由于解压缩算法生成的输出字节数比接收的输入字节数多,“就地”解压缩引入了一种风险,即解压缩输出流的写入指针可能会碰到经压缩数据输入流的读取指针,并在处理经压缩数据以进行解压缩之前盖写经压缩数据。出于此原因,现有的就地安全解压缩算法被设计为确保较大的安全裕度,并且通常无法提供与其他更常用的解压缩算法相比具有竞争力的压缩比。
14.本文公开的处理技术允许以“就地安全”的方式执行任何面向流的解压缩算法。当解压缩算法能够读取和写入同一存储器缓冲区,同时保证输入流的数据在被操作并变换为相应的输出之前不会被输出流的数据盖写时,该算法在本文中被称为“就地安全”。例如,经压缩数据流可被存储在存储器缓冲区的第一子集中并且对应的未压缩数据流可被写入同
一存储器缓冲区的第二子集中。尽管存储经压缩数据和未压缩数据的数据块的各子集之间可能存在一些交叠,但数据以确保输出流的写入指针不会在任何时间点处碰到输入流的读取指针的方式来被存储和操作。
15.根据一个实现,经压缩数据可与在压缩时计算的偏移(本文称为“就地安全(ips)偏移”)相关联地被存储。此偏移指示可分配的存储器缓冲区的最小大小,以确保使用选择的解压缩算法对相关联的数据进行就地安全解压缩。最终,这一被预先计算、存储的ips偏移允许就地执行解压缩(例如,在单个存储器缓冲区中),而不会降低所选解压缩算法的效率。因此,所公开的技术有助于以释放大量处理资源以用于其他系统任务的方式就地安全地使用一些最强大和流行的压缩和解压缩算法。
16.图1例示了根据两种不同方法对经压缩数据流108执行就地解压缩的示例系统100。经压缩数据流108被存储在非易失性存储122中,诸如磁盘、固态设备、f

ram、mram、闪存等。例如,非易失性存储122可被包括在移动设备(例如,电话、平板)、游戏控制台、个人计算机、外部硬盘驱动器、基于云的服务器等中。
17.在图1所示的状态之前,经压缩数据流108使用选择的面向流的压缩算法被压缩,该算法可以根据不同的实现而有所不同。术语“面向流”是指对输入流的各元素进行依次操作以生成相关联的输出流的算法。示例面向流的压缩算法包括但不限于zlib、gzip、lz77、lz78、lzw、lzma、brotli、zstd。
18.在图1中,经压缩数据流108已经与在压缩时确定的就地安全(ips)偏移110一起被存储。当在解压缩过程期间利用此经存储的偏移来分配存储器时,即使选择的压缩算法本身未设计为以这种方式安全地执行,经压缩数据流108也可被就地(例如,在单个连续存储器空间中)安全地解压缩。
19.为了例示ips偏移110的效用和目的,图1例示了两种不同的解压缩方法102和104。解压缩方法102和104两者都是“就地”解压缩的示例。然而,解压缩方法104是“就地安全的”,而解压缩方法102不是“就地安全的”。
20.解压缩方法102(左侧)例示了不使用ips偏移110的不安全就地解压缩的示例。响应于解压缩请求发起的处理设备,系统100在易失性存储器106(例如ram、dram、s

ram)中分配存储器缓冲区112以接收经压缩数据流108并且还用作对应经解压数据的输出流的写入位置。在一个实现中,存储器缓冲区112是存储器块的顺序连续序列。例如,存储器缓冲区112可以与从存储器缓冲区112的开始到存储器缓冲区112的末端(例如,在存储器缓冲区112内从左到右)依次地增加的连续逻辑地址的范围重合。
21.在此第一办法中,存储器缓冲区112的长度在大小上等于对应于经压缩数据流108的经解压数据的大小(l
decompressed
)。例如,此长度(l
decompressed
)是在数据最初被压缩并存储在与经压缩数据流108相关联的元数据中时被确定的。
22.在解压缩方法102期间的第一时间(t0),经压缩数据流108被放置在存储器缓冲区112的末端114,使得经压缩数据流的最后一个字节被存储在存储器缓冲区112的最后一个物理块内。读取指针(rp)被放置以指示经压缩数据流108的第一块,并且写入指针(wp)被放置在存储器缓冲区112的开始块。
23.选择解压缩算法从读取指针(rp)的位置开始并在朝着已分配的存储器缓冲区112的末端114的前向方向上继续读取经压缩数据流108。随着数据被依次读取和操作,解压缩
算法从写入指针(wp)的位置开始并在前向方向上继续写入对应的经解压数据流116。当解压缩算法读取经压缩数据流108并输出经解压数据流116的各个值时,系统100不断更新rp和wp位置。存储器缓冲区112的状态在三个后续时间t1、t2和t3中的每一者处被例示。在时间t1,经解压数据流116的第一部分被写入,但是wp仍然明显滞后于读取指针。在时间t2,写入指针(wp)位置与读取指针(rp)的初始位置(例如,t0位置)重合。然而,这还不构成问题,因为经压缩数据流的该第一部分已经被解压缩算法读取和操作。然而,到时间t3时,写入指针(wp)位置已经超过读取指针(rp)的位置,并且经压缩数据尚未被解压缩算法处理的部分已经被盖写。这会导致数据损坏和/或系统错误。
24.与解压缩方法102相反,解压缩方法104(右侧)例示了对ips偏移110的使用,其确保解压缩是就地安全的。根据此第二方法,系统100利用ips偏移响应于解压缩请求来选择存储器缓冲区的大小。在此情况下,系统100分配长度在大小上至少等于经解压数据流长度(l
decompressed
)和经存储的ips偏移110之和的存储器缓冲区118。
25.除了长度之外,存储器缓冲区118可具有与存储器缓冲区112相似或相同的特征。在解压缩方法104期间的第一时间(t0),经压缩数据流108被放置在存储器缓冲区118的末端120,使得经压缩数据流的最后一个字节被存储在存储器缓冲区118的最后一个物理块内。
26.与解压缩方法102类似,读取指针(rp)被放置以指示经压缩数据流108的第一块,并且写入指针(wp)被放置以标记存储器缓冲区118中的第一可用块(例如,具有最低逻辑块地址的块)。然后,选择解压缩算法开始从读取指针(rp)沿朝着存储器缓冲区118的末端120的前向方向上读取经压缩数据流108。对于作为输入来被读取的数据的每个字节,选择解压缩算法生成从写入指针(wp)的位置开始依次地写入的一个或多个输出字节(例如,作为解压缩流116)。当解压缩算法读取经压缩数据流108并输出经解压数据流116的各个值时,rp和wp位置被连续地更新。
27.由于基于ips偏移110和经解压数据大小的存储器缓冲区118的大小,在整个解压缩过程(例如,t0、t1、t2、t3)中,写入指针(wp)滞后于读取指针(rp)的位置。这允许解压缩能就地安全地完成,即使所采用的解压缩算法本身并不是为就地执行而设计的。
28.图2例示了用于计算促进就地安全数据解压缩的就地偏移(ips)的示例系统200。在此系统200中,软件开发者使用开发api 202来执行用于最终确定和封装软件产品的各种动作。开发api 202向指定的压缩/解压缩引擎206提供软件产品的经解压数据流210。压缩/解压缩引擎206对数据执行面向流的压缩例程并输出经压缩数据流212。
29.开发api 202然后向ips偏移确定工具204传送对ips偏移的ips偏移请求214。在一个实现中,ips偏移请求包括经压缩数据流212和标识符两者,ips偏移确定工具204可该标识符用来标识在先前压缩步骤中使用的压缩/解压缩引擎206。ips偏移确定工具204将经压缩数据流212加载到临时读取缓冲区中并调用压缩/解压缩引擎206以从该临时读取缓冲区读取并向临时写入缓冲区写入输出(经解压数据流210)。在此解压缩期间,ips偏移确定工具204监视输入流的读取指针和输出流的写入指针以计算在经压缩数据流212的就地解压缩期间写入指针位置可超过读取指针位置的最大偏移。此最大偏移作为ips偏移216返回。下面的图3提供了可由ips偏移确定工具204执行以计算ips偏移的操作的详细示例。
30.响应于经由开发api 202接收到ips偏移216,开发者选择用于封装资产集合的格
式,包括经压缩数据流212(例如,经封装的软件产品)、ips偏移216和其他选择元数据。这些资产被提供给文件生成器218,其继而创建存储资产集合的文件222。尽管文件222中包括的特定数据在不同的实现中可以采用不同的形式,但是文件222可例如包含诸如经压缩数据、经压缩数据的大小、相应的经解压数据的大小和ips偏移之类的资产。
31.根据一个实现,文件生成器218创建可用于定位文件222内的每个单独资产的文件索引220。例如,文件索引220可包括软件产品的id、指示经压缩数据流212在文件222内的开始的位置、经压缩数据流212的大小、对应的经解压数据流210的大小,以及ips偏移216。在一些实现中,ips偏移216可被存储在文件222外部的位置。在此情况下,文件索引220和/或文件222可包括指向ips偏移216的外部位置的指针。文件222可被放置在永久存储位置224中,诸如文件可用于下载的服务器位置。
32.除了指示文件生成器218生成文件222之外,开发者还可写文件读取器226并由处理设备(例如,用户机器)使用以读取文件222。在一些情况下,使得文件读取器226可与文件222一起下载。在其他情况下,文件读取器226在与下载文件222不同的时间被安装在用户机器上。例如,文件读取器222可被包括在web浏览器引擎中。此文件读取器226例如是包括用于从文件索引220读取信息;分配存储器缓冲区(例如,基于经解压数据流210的大小和ips偏移216),和/或分配用于接收经压缩数据流212的存储器缓冲区的特定子集的代码的可执行文件。可执行文件226可进一步包括用于将经压缩数据流212读入经分配的存储器缓冲区、调用解压缩api(未示出)、以及向解压缩api提供诸如以下参数的代码:经分配的存储器缓冲区的大小(例如,ips偏移和经解压数据的大小之和)、指示经压缩数据在存储器缓冲区内的开始的读取指针位置、指示经解压数据的写开始位置的写入指针位置、以及经压缩数据的大小。
33.在解压缩期间,处理设备(例如,用户机器)运行文件读取器226并由此向解压缩api提供用于在指定的存储器缓冲区内就地安全地解压经压缩数据流212的信息。
34.在一个实现中,用户机器利用所存储的ips偏移以与参照图1所描述的方式相同或相似的方式(例如,解压缩方法104)来解压缩数据。值得注意的是,上述方法需要在后端上进行工作(例如,在数据压缩时计算ips偏移)以减少前端上(例如,在数据解压缩时)的存储器需求。此模型特别适用于被压缩了一次并反复解压缩的数据文件。例如,游戏资产可以被生成(压缩)一次,但是在游戏的赏玩会话期间被多次读取和解压缩。然而,此模型对于“压缩一次,解压一次”的情形也可能是有益的,特别是如果执行压缩的处理器与执行解压缩的处理器相比增加了计算资源。例如,具有充足计算资源的基于云的服务可准备软件产品以在计算资源相对有限的移动设备上下载和解压缩。当这些软件产品被压缩并使用ips偏移来被存储时(如上所述),移动设备可以投入更少的处理资源来解压缩此类数据。
35.图3例示了由系统300执行的计算可用于确定存储器缓冲区大小以保证经压缩数据流的就地安全解压缩的就地安全(ips)偏移的示例操作。根据一个实现,图3所示的操作由开发工具(诸如图2的ips偏移确定工具204)执行。在时间t0,系统300处于为解压缩操作执行存储器分配动作的第一状态302。系统300已经接收到经压缩数据流310以及参数集合314,诸如标识选择解压缩引擎的参数(例如,“解压缩id”)、要输入到解压缩引擎的经压缩数据流的大小(例如,“l
compressed”)以及经解压数据流的大小(例如,“l
decompressed”)应作为选择解压缩引擎的输出。在一个实现中,解压缩引擎是系统300可访问的运行时库的模块。
36.在所示的示例中,经解压数据流的长度为6kb而经压缩数据流的长度为20kb。decomp.id变量指示解压缩算法“zlib”将被用于对经压缩数据流进行解压缩。
37.系统300分配长度等于经压缩数据流310的大小(例如,l
compressed
=6kb)的第一存储器空间318。经压缩数据流310被读入此第一存储器空间318。系统300还分配第二存储器空间312以用于接收“zlib”解压缩模块的输出。此第二存储器空间312的长度等于未压缩数据流的大小(例如,l
decompressed
=20kb)。系统300定义了初始位置wp(t0)=0的写入指针(wp),对应于第二存储器空间312的起始存储块。系统300定义了初始位置wp(t0)=0的写入指针(wp),对应于第二存储器空间318的起始存储块。此rp起始索引rp(t0)被定义为等于l
decompressed
和l
compressed
之差(例如,20kb

6kb=14kb)。
38.系统300通过请求调用解压缩引擎(zlib)以从第一存储器空间318读取经压缩数据流310并将输出流(例如,经解压数据流316)写入第二存储器空间312。随着经压缩数据流310被读取和解压缩,系统300相应地更新wp和rp的位置,跟踪这些指针的相互关系的值。
39.状态304、306和308分别例示了第一存储器空间318和第二存储器空间312以及wp和rp在后续时间t1、t2和t3的位置。在时间t1,写入指针(wp)移动了距离d1并现在假定值为10kb。相反,读取指针(rp)移动了距离d2并现在假定值为16kb。在时间t1,写入指针(wp)移动了距离d1并现在假定值为15kb。相反,读取指针(rp)移动了总距离d4并现在假定值为17kb。此时,wp值已经超过了rp的起始值,但wp仍略落后于rp。
40.到时间t3时(由状态308所示),写入指针(wp)移动了总距离d5并现在假定值为19kb。相反,读取指针(rp)移动了总距离d6并现在假定值为18kb。在这里,wp已经超过rp达偏移322(例如,1kb)。
41.一旦wp索引值跳到rp索引值之前,系统300就记录偏移322(例如wp

rp)。随着解压缩例程继续,系统300监视此偏移的值,每次偏移增加时更新记录的偏移值。解压缩结束时,rp和wp的值均为l
decompressed
,而存储的最终偏移表示指针wp和rp之间的最大偏移(例如,max(wp

rp))。该值被标识为就地偏移(ips偏移)并输出到内容制作平台,在该平台上,该值可被封装在包含经压缩数据流的文件中。
42.在上述过程中,假设解压缩引擎一次从经压缩数据流310中读取一个字节,并在前进和读取下一字节之前输出通过读取该字节可解压缩的所有内容。如果上述指针跟踪技术与执行某些速度优化(诸如包括在输出所有可以解压缩的内容之前预读取输入流的优化)的解压缩算法一起使用,系统可能无法准确确定相应输入/输出字节的写入指针和读取指针之间的ips偏移。如此,在一些实现中,系统300可执行动作以禁用预读取优化和/或以其他方式确保解压缩引擎在每个时间点动作以从已经消耗的输入数据流生成尽可能多的输出字节。
43.图4例示了用于确定可用于确定存储器缓冲区大小以保证经压缩数据流的就地安全解压缩的就地安全(ips)偏移的示例操作400。根据一个实现,操作400反映了参考系统300所描述的那些。第一接收操作402接收经压缩数据流。参数标识操作404标识包括以下的参数:解压缩算法id(例如,从可用运行时库中唯一标识解压缩算法的id)、经压缩数据流的大小(l
decompressed
)、以及当经压缩数据流被提供作为选择解压缩算法的输入时预期作为输出的经解压数据流的大小(l
compressed
)。
44.存储器分配操作406分配用于接收经压缩数据流的第一存储器空间和用于写入经
解缩数据流的第二存储器空间。指针初始化操作408定义最初指向第二存储器空间的第一块的写入指针(wp)索引(wp=0)。指针初始化操作408还定义了对应于第一存储器空间的开始(例如,经压缩数据流的第一块)的读取指针索引(rp)。该读取指针索引最初设置为等于经解压数据大小(l
decompressed
)和经压缩数据大小(l
compressed
)之差(例如,rp=l
decompressed

l
compressed
)。读取操作410将经压缩数据流读入第一存储器空间,其中第一数据块与所定义的读取指针索引(rp)对齐。
45.选择操作412选择经压缩数据流的第一部分(例如,第一字节)。读取操作414读取第一部分作为选择解压缩算法的输入并相应地更新读取指针(rp)。写入操作416将解压缩算法(例如,由解压缩算法id标识的解压缩算法)的输出写入在当前wp位置开始的第二存储器空间并相应地更新wp。输出数据流跨第二存储器空间内的一系列连续存储器块按正向方向被依次写入。
46.确定操作418确定当前写入指针索引(wp)是否大于当前读取指针索引(rp)。如果是,则另一确定操作420确定偏移wp

rp是否大于存储为ips偏移的当前值。(注意:在确定操作418的初始评估之际,存储的ips偏移被设置为零。在此情形中,在确定操作418第一次确定wp索引大于rp索引时,使用非零值来更新所存储的ips偏移。)
47.假设wp和rp之差大于所存储的ips偏移,则更新操作422更新所存储的ips偏移以等于当前偏移值(wp

rp)。确定操作424确定经压缩数据流中是否还有要解压缩的附加数据。如果是,则选择操作426选择经压缩数据流的下一个顺序的连续部分(例如,流中的下一个字节),并且操作414、416、418、420、422和424重复直到整个经压缩数据流已被解压缩。一旦经压缩数据流的所有数据都被选择解压缩算法解压缩,则输出操作428输出存储的ips偏移。此存储的ips值代表解压缩过程期间wp和rp之间的最大差值。
48.图5例示了用于使用存储的ips偏移值来解压缩数据的示例操作500。接收操作502接收指令以解压缩驻留在永久存储位置(诸如来自硬盘驱动器磁盘或固态存储器)中的数据流。指令根据操作504、506、508、510和512被处理。
49.首先,读取操作504读取与数据流一起存储的文件索引以确定包括经解压数据流的预期长度和ips偏移的解压缩参数。在一个实现中,ips偏移最初以与上文参照图3

4描述的方式相同或相似的方式来计算。例如,这些参数可直接在文件索引内指定或存储在由文件索引指示的位置。存储器分配操作506分配大小等于ips偏移与预期经解压数据流长度之和的存储器缓冲区,读取操作508将经压缩数据的数据流读入所分配存储器缓冲区的末尾部分。例如,数据流可跨位于存储器缓冲区末端的连续范围的顺序物理存储器块被存储,使得数据流的最后一个字节被存储在所分配的存储器缓冲区的最后一个物理块中(例如,如图1的解压缩方法104所示)。
50.读取指针定义操作510定义具有对应于存储器缓冲区内的经压缩数据的开始的起始值的读取指针。例如,读取指针起始值被设置为等于存储经压缩数据流的第一字节的物理块。写入指针定义操作512定义具有对应于存储器缓冲区中的第一块(例如,具有最低逻辑块地址)的初始值的写入指针。
51.解压缩api调用操作514调用解压缩api并传递读取指针和写入指针参数以用于解压缩操作。作为响应,解压缩算法从存储器缓冲区的末端部分依次地读取经压缩数据流(例如,沿朝着缓冲区的末端的前向方向上)并将经解压数据流依次地写入到存储器缓冲区的
开始部分(例如,从缓冲区的开始并沿前向方向)。由于使用ips偏移来确定存储器缓冲区的初始大小以及读取和写入指针的初始位置,因此写入指针不会超过读取指针(例如,解压缩是就地安全的)。
52.图6例示了可以适合于实现所公开技术的各方面的处理设备600的示例示意图。处理设备600包括一个或多个处理单元602、存储器604、显示器606以及其他接口608(例如,按钮)。存储器604一般包括易失性存储器(例如,ram)和非易失性存储器(例如,闪存存储器)两者。操作系统610(诸如microsoft操作系统、microsoftphone操作系统或设计成用于游戏设备的特定操作系统)驻留在存储器504中,并且由(诸)处理器单元602来执行,但是应当理解,可以采用其他操作系统。
53.一个或多个应用612(例如,诸如图2的ips偏移确定工具204和/或图2的压缩/解压缩引擎206)被加载在存储器604中,并由(诸)处理器单元602在操作系统610上执行。
54.应用612可接收来自各种输入本地设备(未示出)的输入,诸如话筒、键盘、鼠标、触控笔、触摸板、操纵杆等。此外,应用612可通过使用更多通信收发器630和天线632通过有线或无线网络与一个或多个远程设备(诸如远程定位的智能设备)通信来接收来自此类设备的输入以提供网络连接性(例如,移动电话网络、蓝牙)。
55.处理设备600进一步包括存储设备628和电力供应616,该电力供应由一个或多个电池(例如,电池620)和/或其他电源供电并且向处理设备600的其他组件提供电力。电力供应616还可以被连接到外部功率源(未示出),该外部功率源对内置电池或其他功率源进行超驰控制(override)或再充电。
56.在示例实现中,ips偏移确定工具包括由存储在存储器604和/或存储设备528中并由处理器单元602处理的指令实现的硬件和/或软件。存储器604可以是主机设备的或耦合到主机的附件的存储器。
57.处理设备600可包括各种有形计算机可读存储介质和无形计算机可读通信信号。有形计算机可读存储可由能由处理设备600访问的任何可用介质来体现,并包含易失性和非易失性存储介质、可移动和不可移动存储介质两者。有形计算机可读存储介质不包括无形和瞬态通信信号,而是包括以用于存储诸如计算机可读指令、数据结构、程序模块或其他数据等信息的任一方法或技术实现的易失性和非易失性、可移动和不可移动存储介质。有形计算机可读介质包括但不限于,ram、rom、eeprom、闪存存储器或其他存储器技术、cd

rom、数字多功能盘(dvd)或其他光盘存储、磁带盒、磁带、磁盘存储或其他磁存储设备、或可被用来储存所需信息且可以由处理设备600访问的任何其他有形介质。与有形计算机可读存储介质对比,无形计算机可读通信信号可用诸如载波或其他信号传输机制等已调制数据信号来体现计算机可读指令、数据结构、程序模块或其他数据。术语“已调数据信号”意指以在信号中对信息进行编码的方式来使其一个或多个特性被设定或改变的信号。作为示例而非限制,无形通信信号包括有线介质(诸如有线网络或直接线路连接),以及无线介质(诸如声学、rf、红外线和其他无线介质)。
58.一些实现可包括制品。制品可包括存储逻辑的有形存储介质(存储器设备)。存储介质的示例可包括能够存储电子数据的一种或多种类型的处理器可读存储介质,包括易失性存储器或非易失性存储器、可移动或不可移动存储器、可擦除或不可擦除存储器、可写或可重写存储器等。逻辑的示例可包括各种软件元素,诸如软件组件、程序、应用、计算机程
序、应用程序、系统程序、机器程序、操作系统软件、中间件、固件、软件模块、例程、子例程、操作段、方法、过程、软件接口、应用程序接口(api)、指令集、计算代码、计算机代码、代码段、计算机代码段、文字、值、符号、或其任意组合。例如,在一个实现中,制品可储存可执行计算机程序指令,该指令在由计算机执行时致使该计算机执行根据所描述的各实现的方法和/或操作。可执行计算机程序指令可包括任何合适类型的代码,诸如源代码、已编译代码、已解释代码、可执行代码、静态代码、动态代码等。可执行计算机程序指令可以根据用于指令计算机执行特定操作段的预定义计算机语言、方式或句法来被实现。这些指令可以使用任何合适的高级、低级、面向对象、可视、已编译、和/或已解释编程语言来实现。
59.本文所公开的示例方法包括:处理指令以解压缩与就地安全(ips)偏移相关联地存储的经压缩数据流;分配在经压缩数据流的就地解压缩期间用于存储输入流和输出流的存储器空间;在经分配的存储器空间内就地解压缩经压缩数据流。ips偏移表示在经压缩数据流的就地解压缩期间输出流的写入指针位置超过对应输入流的读取指针位置的最大偏移,并且经分配的存储器空间的大小是基于ips偏移和输出流的大小来选择的。
60.在任何前述方法的另一示例方法中,经分配的存储器空间的大小等于ips偏移和输出流的大小之和。
61.在任何前述方法的又一示例方法中,ips偏移进一步表示当输出流的写入指针被初始化为零值并且输入流的读取指针被初始化为等于输出流的长度与输入流的长度之间的差的值时,输出流的写入指针位置超过输入流的读取指针位置的最大偏移。
62.任何前述方法的又一示例方法,包括:将经压缩数据流中的数据依次读入经分配的存储器空间的连续末端部分。
63.在任何前述方法的再一示例方法中,经压缩数据流中的最后一个字节被存储在经分配的存储器空间中的最后一个物理块中。
64.在任何前述方法的再一示例方法中,就地解压缩经压缩数据流进一步包括从经分配的存储器空间中的第一数据块开始依次写入输出流的值。
65.在任何前述方法的另一示例方法中,存储器空间是顺序物理块的连续序列。
66.本文所公开的示例系统包括:用于处理指令以解压缩与就地安全(ips)偏移相关联地存储的经压缩数据流的装置;用于分配在经压缩数据流的就地解压缩期间用于存储输入流和输出流的存储器空间的装置;用于在经分配的存储器空间内就地解压缩经压缩数据流的装置。ips偏移表示在经压缩数据流的就地解压缩期间输出流的写入指针位置超过对应输入流的读取指针位置的最大偏移,并且经分配的存储器空间的大小是基于ips偏移和输出流的大小来选择的。
67.本文所公开的示例系统包括就地安全(ips)偏移确定工具、文件生成器和文件读取器。ips偏移确定工具在解压缩经压缩数据流时跟踪读取指针和写入指针的位置;以及基于跟踪位置,标识ips偏移,ips偏移表示写入指针位置超过读取指针位置的最大偏移。文件生成器与ips偏移的位置相关联地存储经压缩数据流以及文件读取器分配用于解压缩经压缩数据流的存储器空间,存储器空间具有基于ips偏移的大小。
68.在根据任何先前系统的另一示例系统中,经分配的存储器空间的大小等于ips偏移和与经压缩数据流相关联地保存的经解压数据流的大小之和。
69.在任何前述系统的再一示例系统中,存储器空间是顺序物理块的连续序列。
70.在任何前述系统的又一示例系统中,该ips偏移确定工具通过以下方式跟踪读取指针和写入指针的位置:初始化写入指针以指向零索引;初始化读取指针以指向等于经解压数据流的预期长度与所述经压缩数据流的长度之间的差的索引;使用从所述经压缩数据流中读取的每个数据字节来更新所述读取指针;以及使用向所述经解压数据流中写入的每个数据字节来更新所述写入指针。
71.在任何前述系统的另一示例系统中,该ips偏移和该经压缩数据流被存储在同一数据文件中。
72.在任何前述系统的另一示例系统中,该文件读取器与该数据文件一起存储并且选择性地可执行以供用户设备下载。
73.本文公开的示例存储器设备存储用于执行计算机进程的处理器可读指令,包括:处理指令以解压缩与就地安全(ips)偏移相关联地存储的经压缩数据流;分配在经压缩数据流的就地解压缩期间用于存储输入流和输出流的存储器空间;在所述经分配的存储器空间内就地解压缩所述经压缩数据流。ips偏移表示在经压缩数据流的就地解压缩期间输出流的写入指针位置超过对应输入流的读取指针位置的最大偏移,并且经分配的存储器空间的大小是基于ips偏移和输出流的大小来选择的。
74.在任何先前存储器设备的示例存储器设备中,其中经分配的存储器空间的大小等于ips偏移和输出流的大小之和。在任何前述存储器设备的又一示例存储器设备中,ips偏移表示当输出流的写入指针被初始化为零值并且输入流的读取指针被初始化为等于输出流的长度与输入流的长度之间的差的值时,输出流的写入指针位置超过输入流的读取指针位置的最大偏移。
75.在任何前述存储器设备的又一示例存储器设备中,计算机进程进一步包括将经压缩数据流中的数据依次读入经分配的存储器空间的连续末端部分。
76.在任何前述存储器设备的又一示例存储器设备中,经压缩数据流中的最后一个字节被存储在经分配的存储器空间中的最后一个物理块中。
77.在任何前述存储器设备的又一示例存储器设备中,就地解压缩经压缩数据流进一步包括从经分配的存储器空间中的第一数据块开始依次写入输出流的值。
78.在任何前述存储器设备的又一示例存储器设备中,存储器空间是顺序物理块的连续序列。
79.本文中所描述的各实现可被实现为一个或多个计算机系统中的逻辑步骤。逻辑操作可被实现为:(1)在一个或多个计算机系统中执行的处理器实现的步骤的序列;以及(2)一个或多个计算机系统内的互连机器或电路模块。该实现是取决于被利用的计算机系统的性能要求的选择问题。相应地,组成本文中所描述的各实现的逻辑操作另外还可被称为操作、步骤、对象、或模块。此外,还应该理解,逻辑操作可以以任何顺序来执行,除非明确地声明,或者权利要求语言固有地要求某特定顺序。以上说明、示例和数据连同附图提供了对示例性实现的结构和用途的全面描述。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

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

相关文献

  • 日榜
  • 周榜
  • 月榜