CN107729051B - 代码处理方法、装置、可读存储介质和计算机设备 - Google Patents
代码处理方法、装置、可读存储介质和计算机设备 Download PDFInfo
- Publication number
- CN107729051B CN107729051B CN201710875450.9A CN201710875450A CN107729051B CN 107729051 B CN107729051 B CN 107729051B CN 201710875450 A CN201710875450 A CN 201710875450A CN 107729051 B CN107729051 B CN 107729051B
- Authority
- CN
- China
- Prior art keywords
- code
- compressed
- current
- compression
- length
- 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.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30145—Instruction analysis, e.g. decoding, instruction word fields
- G06F9/30156—Special purpose encoding of instructions, e.g. Gray coding
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/3017—Runtime instruction translation, e.g. macros
- G06F9/30178—Runtime instruction translation, e.g. macros of compressed or encrypted instructions
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Compression, Expansion, Code Conversion, And Decoders (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明涉及一种代码处理方法、装置、可读存储介质和计算机设备。代码处理方法包括:根据接收的压缩指令获取待压缩代码;获取存储于ROM的代码片段;采用滑动窗口压缩算法对代码片段进行压缩得到压缩代码片段之后的当前滑动窗口和压缩字典;根据代码片段对应的当前滑动窗口和压缩字典采用滑动窗口压缩算法对待压缩代码进行压缩,得到待压缩代码的压缩包。如此,通过采用对代码片段压缩之后的当前滑动窗口和压缩字典对待压缩代码进行压缩,可以变相增大待压缩代码的体积,增大压缩字典,从而提高对待压缩代码进行压缩的压缩率。
Description
技术领域
本发明涉及计算机技术领域,特别是涉及一种代码处理方法、装置、可读存储介质和计算机设备。
背景技术
计算机系统中存储一些程序的代码。代码需要占据存储空间,因此一般会将代码进行压缩处理,存储压缩后的压缩包,减小占用的存储空间,等到需要使用的时候再进行解压。
对代码进行压缩通常采用的是滑动窗口压缩算法。滑动窗口压缩算法利用待压缩数据本身的重复性质、采用滑动窗口和压缩字典来进行数据压缩;随着压缩的进行,已被压缩的部分作为压缩字典的一部分,因此压缩字典逐渐变大。压缩字典越大,被压缩后的文件体积越小。
采用滑动窗口压缩算法对代码进行压缩时,如果代码本身体积比较小,例如被压缩的对象为嵌入式系统存着的一些执行频率不高的小体积代码(例如设备初始化的代码),对其进行压缩时,最先开始的压缩字典较小,压缩率低,从而使得代码的总体压缩率低。
发明内容
基于此,有必要针对传统的代码压缩率低的问题,提供一种提高代码压缩率的代码处理方法、装置、可读存储介质和计算机设备。
一种代码处理方法,包括:
接收压缩指令,根据所述压缩指令获取待压缩代码;
获取存储于ROM的代码片段;
采用滑动窗口压缩算法对所述代码片段进行压缩,得到压缩所述代码片段之后的当前滑动窗口和压缩字典;
根据所述代码片段对应的当前滑动窗口和压缩字典,并采用滑动窗口压缩算法对所述待压缩代码进行压缩,得到所述待压缩代码的压缩包。
一种代码处理装置,包括:
待压缩代码获取模块,用于接收压缩指令,根据所述压缩指令获取待压缩代码;
代码片段获取模块,用于获取存储于ROM的代码片段;
代码片段压缩模块,用于采用滑动窗口压缩算法对所述代码片段进行压缩,得到压缩所述代码片段之后的当前滑动窗口和压缩字典;
待压缩代码压缩模块,用于根据所述代码片段对应的当前滑动窗口和压缩字典,并采用滑动窗口压缩算法对所述待压缩代码进行压缩,得到所述待压缩代码的压缩包。
上述代码处理方法和装置,通过在根据接收的压缩指令获取待压缩代码,获取存储于ROM的代码片段之后,采用滑动窗口压缩算法对代码片段进行压缩得到压缩代码片段之后的当前滑动窗口和压缩字典,再根据代码片段对应的当前滑动窗口和压缩字典采用滑动窗口压缩算法对待压缩代码进行压缩,得到待压缩代码的压缩包。对ROM存储的同一段代码片段而言,代码的内容是固定不变的,因此可将固定不变的代码片段作为被压缩代码的一部分使用,如此,通过采用对代码片段压缩之后的当前滑动窗口和压缩字典对待压缩代码进行压缩,可以变相增大待压缩代码的体积,增大压缩字典,从而提高对待压缩代码进行压缩的压缩率。
一种可读存储介质,存储有计算机程序,存储的计算机程序被处理器执行时实现上述代码处理方法的步骤。
一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述代码处理方法的步骤。
上述可读存储介质和计算机设备,由于实现了上述代码处理方法,同理可提高对待压缩代码进行压缩的压缩率。
附图说明
图1为第一实施例中代码处理方法的流程图;
图2为第二实施例中代码处理方法的流程图;
图3为第三实施例中代码处理方法的流程图;
图4为一实施例中代码处理方法的解压步骤的流程图。
图5为一实施例中代码处理装置的结构图。
具体实施方式
参考图1,一实施例中的代码处理方法,可应用于终端,包括步骤S110至步骤S170。
S110:接收压缩指令,根据压缩指令获取待压缩代码。
压缩指令为指示对选定的代码进行压缩的指令。待压缩代码是选定的需要进行压缩的代码。例如,用户选择待压缩代码后对应输入压缩指令,终端接收压缩指令可根据压缩指令获取对应的待压缩代码。
S130:获取存储于ROM的代码片段。
ROM(Read-only Memory只读存储器)是一种只能读出而不能写入的存储器,存储于ROM的内容是固定不变的。例如,对于嵌入式系统而言,存储在ROM中的代码与芯片的型号相对应、不会更改。ROM中存储的代码一般体积比较大。
其中,代码片段可以是一个,也可以有多个。具体地,代码片段可以是ROM中完整对应一个程序的整体代码,也可以是某个整体代码中的一部分。具体地,存储于ROM的代码片段可以是根据预设的地址信息和长度信息查找得到,也可以是根据输入的地址信息和长度信息查找得到。
具体地,步骤S110和步骤S130的执行顺序不限,可以是先执行步骤S110,也可以是先执行步骤S130,还可以是同时执行步骤S110和步骤S130。
S150:采用滑动窗口压缩算法对代码片段进行压缩,得到压缩代码片段之后的当前滑动窗口和压缩字典。
滑动窗口压缩算法为采用压缩字典做数据压缩的算法。具体地,滑动窗口压缩算法为LZ77算法。采用滑动窗口压缩算法对数据进行压缩后,会得到压缩状态和压缩结果;压缩状态包括当前滑动窗口和压缩字典,压缩结果为数据对应的压缩后的文件。因此,对代码片段进行压缩可得到代码片段对应的当前滑动窗口和压缩字典。采用滑动窗口压缩算法对代码片段进行压缩得到的压缩后的文件可以忽略不用,具体可以是直接丢弃。
S170:根据代码片段对应的当前滑动窗口和压缩字典,并采用滑动窗口压缩算法对待压缩代码进行压缩,得到待压缩代码的压缩包。
采用代码片段对应的当前滑动窗口和压缩字典对待压缩代码进行压缩,从而完成基于代码片段对待压缩代码进行压缩的操作。待压缩代码的压缩包为对待压缩代码进行压缩得到的压缩结果。
上述代码处理方法,通过在根据接收的压缩指令获取待压缩代码,获取存储于ROM的代码片段之后,采用滑动窗口压缩算法对代码片段进行压缩得到压缩代码片段之后的当前滑动窗口和压缩字典,再根据代码片段对应的当前滑动窗口和压缩字典采用滑动窗口压缩算法对待压缩代码进行压缩,得到待压缩代码的压缩包。对ROM存储的同一段代码片段而言,代码的内容是固定不变的,因此可将固定不变的代码片段作为被压缩代码的一部分使用,如此,通过采用对代码片段压缩之后的当前滑动窗口和压缩字典对待压缩代码进行压缩,可以变相增大待压缩代码的体积,增大压缩字典,从而提高对待压缩代码进行压缩的压缩率。
在一实施例中,代码片段有多个。对应地,步骤S150包括:采用滑动窗口压缩算法对各代码片段分别进行压缩,得到各代码片段对应的当前滑动窗口和压缩字典。
步骤S170包括步骤(a1):分别根据各代码片段对应的当前滑动窗口和压缩字典,并采用滑动窗口压缩算法对待压缩代码进行压缩,得到基于各代码片段的待压缩代码的压缩文件,从多个压缩文件中选取体积最小的压缩文件,得到待压缩代码的压缩包。
采用不同的代码片段对应的当前滑动窗口和压缩字典对待压缩代码进行压缩,得到的压缩文件的体积大小不同。压缩文件的体积越小,表示对待压缩代码进行压缩的压缩率越高。通过选取体积最小的压缩文件作为压缩包,压缩率最优。
步骤S150和步骤S170分别基于各代码片段执行操作,可以是在全部获取完多个代码片段之后对各代码片段分别执行,也可以是通过迭代先后获取代码片段,针对当前的代码片段执行。
在一实施例中,多个代码片段为存储于ROM中同一个整体代码中的片段,各代码片段的代码长度不同。其中,代码长度为代码片段的数据长度。
参考图2,步骤S130包括步骤S131至步骤S135。
S131:初始化当前的代码长度为预设长度。
通过初始化当前的代码长度为预设长度,可使得从预设长度开始获取对应的代码片段。具体地,预设长度为512比特位。
S133:将当前的代码长度与整体代码的整体长度比较。
整体长度为整体代码对应的数据长度。步骤S133可以包括:获取整体代码的整体长度;判断当前的代码长度是否小于或等于整体长度。例如,具体可以是计算当前的代码长度减去整体长度的差值,若差值小于或等于零,表示当前的代码长度小于或等于整体长度;若差值大于零,表示当前的代码长度大于整体长度。
S135:若当前的代码长度小于或等于整体长度,则获取起始地址,并从存储于ROM的整体代码中选取当前的代码长度和起始地址对应的代码片段作为当前的代码片段。
代码片段从整体代码中截取。当前的代码长度小于或等于整体长度,表示代码长度没有越界,此时,从整体代码中选取对应的当前的代码片段。
对应地,步骤(a1)包括步骤S171至步骤S175。
S171:根据当前的代码片段对应的当前滑动窗口和压缩字典,并采用滑动窗口压缩算法对待压缩代码进行压缩,得到基于当前的代码片段的待压缩代码的压缩文件。
S173:将基于当前的代码片段的待压缩代码的压缩文件的体积与已存的最优体积进行比较,选用较小的体积更新已存的最优体积。
若当前的代码片段为第一次选取得到,则已存的最优体积为预设的体积;若当前的代码片段为非第一次选取得到,则已存的最优体积为在前一次选取存储的最优体积。
具体地,选用较小的体积更新已存的最优体积,包括:若基于当前的代码片段的待压缩代码的压缩文件的体积小于或等于已存的最优体积,则存储基于当前的代码片段的待压缩代码的压缩文件的体积作为新的最优体积;若基于当前的代码片段的待压缩代码的压缩文件的体积大于已存的最优体积,则保持已存的最优体积不变。
S175:根据预设长度增加当前的代码长度得到新的当前的代码长度,并返回步骤S133。
对于当前的代码长度的代码片段,执行至步骤S173即完成了基于这一代码长度的代码片段对待压缩代码进行压缩的操作;通过执行步骤S175,获取下一个不同的代码长度,并返回步骤S133以完成基于新的代码长度的代码片段对待压缩代码进行压缩的操作;如此迭代,可循环完成基于多个不同代码长度的代码片段对待压缩代码进行压缩的操作。
具体地,根据预设长度增加当前的代码长度得到新的当前的代码长度包括:在当前的代码长度的基础上增加预设长度得到新的当前的代码长度。
S177:若当前的代码长度大于整体长度,则将已存的最优体积对应的压缩文件作为体积最小的压缩文件,得到待压缩代码的压缩包。
当前的代码长度大于整体长度,表示代码长度越界,此时,不需要再获取代码片段,已存的最优体积对应的压缩文件为体积最小的压缩文件,作为待压缩代码的压缩包。
本实施例通过采用迭代方式进行代码长度的枚举,每一次迭代均完成基于当前的代码长度所对应的代码片段对待压缩代码进行压缩、并选取最优体积的操作,从而选出多个代码长度对应的代码片段中的最优,从而得到的压缩文件最优,处理方式简单。
在一实施例中,起始地址有多个。即,相同代码长度的代码片段有多个且起始地址不同。参考图3,步骤S135包括步骤S1351至步骤S1355。
S1351:若当前的代码长度小于或等于整体长度,则重置当前的起始地址为预设地址。
通过重置当前的起始地址为预设地址,可使得每次执行步骤S1351都可重新以预设地址开始为起始位置获取当前的代码长度对应的代码片段。具体地,预设地址为0。
S1353:根据当前的起始地址和当前的代码长度判断当前的起始地址是否越界。
当前的起始地址越界是当前的起始地址超出整体代码的地址范围。若当前的起始地址没有越界,则执行步骤S1355;若当前的起始地址越界,则执行步骤S175。
S1355:从存储于ROM的整体代码中选取当前的代码长度和当前的起始地址对应的代码片段作为当前的代码片段。
对应地,S173之后、S175之前,还包括:
S174:根据预设长度增加当前的起始地址得到新的当前的起始地址,并返回步骤S1353。
在代码长度不变的下,对于当前的起始地址的代码片段,执行至步骤S173即完成了基于当前的起始地址的代码片段对待压缩代码进行压缩的操作;通过执行步骤S174,获取下一个不同的起始地址,并返回步骤S1353以完成基于新的起始地址的代码片段对待压缩代码进行压缩的操作;如此迭代,可循环完成基于同一代码长度、多个不同起始地址的代码片段对待压缩代码进行压缩的操作。当这个代码长度对应的多个起始地址都迭代完成,执行步骤S175以获取下一个代码长度,开始下一个代码长度内的起始地址的迭代。
具体地,根据预设长度增加当前的起始地址得到新的当前的起始地址包括:在当前的起始地址的基础上增加预设长度得到新的当前的起始地址。
本实施例通过采用迭代方式进行起始地址的枚举,每一次迭代均完成基于当前的代码长度和当前的起始地址所对应的代码片段对待压缩代码进行压缩、并选取最优体积的操作,从而选出多个代码长度对应的代码片段中的最优,得到的压缩文件最优,处理方式简单。
在一实施例中,步骤S1353包括步骤(b1)至步骤(b3)。
步骤(b1):计算在当前的起始地址的基础上增加当前的代码长度之后的地址得到更改地址,并获取整体代码的末尾地址。
其中,整体代码的末尾地址为整体代码的最后一个数据对应的地址。
步骤(b2):若更改地址大于整体代码的末尾地址,则判定当前的起始地址越界。
步骤(b3):若更改地址小于或等于整体代码的末尾地址,则判定当前的起始地址没有越界。
通过将当前的起始地址的基础上增加当前的代码长度之后得到的更改地址与整体代码的末尾地址进行比较,根据比较结果确定当前的起始地址是否越界,判断方式简单且准确。
在一实施例中,参考图4,上述代码处理方法还包括解压步骤,包括步骤S210至步骤S250。
S210:接收解压指令,根据解压指令获取待解压的压缩包,并获取待解压的压缩包所对应的存储于ROM的代码片段的区域范围。
解压指令为指示对选定的压缩包进行解压的指令。待解压的压缩包是选定的需要进行解压的文件。代码片段的区域范围为代码片段所包括的数据在ROM的地址范围。具体地,可以是获取待解压的压缩包所对应的存储于ROM的代码片段的起始地址和代码长度,得到代码片段的区域范围。
S220:获取待解压的压缩包中当前数据块所对应的字典索引。
待解压的压缩包包括多个数据块,每一个数据块对应字典索引。其中,字典索引是用于指向对应数据的地址的指向信息。
S230:若字典索引指向代码片段的区域范围内,则根据字典索引从代码片段中读取数据得到当前数据块的解压数据。
代码片段存储于ROM,相当于已经存在,即已经被解压了。如果字典索引指向代码片段的区域范围内,说明字典索引对应的数据属于代码片段,此时从代码片段中读取数据。
S240:若字典索引不指向代码片段的区域范围内,则根据字典索引读取对应的数据得到当前数据块的解压数据。
待解压的压缩包由对代码片段和原始的待压缩代码进行压缩得到。字典索引没有指向代码片段的区域范围内,说明字典索引对应的数据不属于代码片段,此时根据字典索引读取对应的数据。
S250:若存在下一数据块,则读取下一数据块作为新的当前数据块,并返回步骤S220。
由于待解压的压缩包由对代码片段和原始的待压缩代码进行压缩得到,因此解压待解压的压缩包得到的数据,是代码片段的数据和待压缩代码的数据中的一种。通过步骤S210至步骤S250,可在解压的过程区分字典索引指向的是在ROM中的代码片段还是原始的待压缩代码。
具体地,步骤S250之后还包括:若不存在下一数据块,则将根据各个数据块所对应的字典索引读取对应的数据所得到的当前数据块的解压数据,作为最终的解压数据。如此,可提取出原始的待压缩代码。
上述代码处理方法可以应用于对嵌入式系统的代码进行处理,比如,采用步骤S110至步骤S170可对嵌入式系统的代码进行压缩处理,压缩率高;采用步骤S210至步骤S250可对嵌入式系统中采用S110至步骤S170进行压缩得到的压缩包进行解压处理。
参考图5,一实施例中的一种代码处理装置,包括待压缩代码获取模块110、代码片段获取模块130、代码片段压缩模块150和待压缩代码压缩模块170。
待压缩代码获取模块110用于接收压缩指令,根据压缩指令获取待压缩代码。
代码片段获取模块130用于获取存储于ROM的代码片段。
代码片段压缩模块150用于采用滑动窗口压缩算法对代码片段进行压缩,得到压缩代码片段之后的当前滑动窗口和压缩字典。
待压缩代码压缩模块170用于根据代码片段对应的当前滑动窗口和压缩字典,并采用滑动窗口压缩算法对待压缩代码进行压缩,得到待压缩代码的压缩包。
上述代码处理装置,通过在待压缩代码获取模块110根据接收的压缩指令获取待压缩代码,代码片段获取模块130获取存储于ROM的代码片段之后,代码片段压缩模块150采用滑动窗口压缩算法对代码片段进行压缩得到压缩代码片段之后的当前滑动窗口和压缩字典,待压缩代码压缩模块170根据代码片段对应的当前滑动窗口和压缩字典采用滑动窗口压缩算法对待压缩代码进行压缩,得到待压缩代码的压缩包。对ROM存储的同一段代码片段而言,代码的内容是固定不变的,因此可将固定不变的代码片段作为被压缩代码的一部分使用,如此,通过采用对代码片段压缩之后的当前滑动窗口和压缩字典对待压缩代码进行压缩,可以变相增大待压缩代码的体积,增大压缩字典,从而提高对待压缩代码进行压缩的压缩率。
在一实施例中,代码片段有多个。对应地,代码片段压缩模块150用于:采用滑动窗口压缩算法对各代码片段分别进行压缩,得到各代码片段对应的当前滑动窗口和压缩字典。待压缩代码压缩模块170用于:分别根据各代码片段对应的当前滑动窗口和压缩字典,并采用滑动窗口压缩算法对待压缩代码进行压缩,得到基于各代码片段的待压缩代码的压缩文件,从多个压缩文件中选取体积最小的压缩文件,得到待压缩代码的压缩包。
采用不同的代码片段对应的当前滑动窗口和压缩字典对待压缩代码进行压缩,得到的压缩文件的体积大小不同。压缩文件的体积越小,表示对待压缩代码进行压缩的压缩率越高。通过选取体积最小的压缩文件作为压缩包,压缩率最优。
在一实施例中,多个代码片段为存储于ROM中同一个整体代码中的片段,各代码片段的代码长度不同。代码片段获取模块130包括长度初始化单元(图未示)、长度比较单元(图未示)和代码片段选取单元(图未示)。
长度初始化单元用于初始化当前的代码长度为预设长度。长度比较单元用于将当前的代码长度与整体代码的整体长度比较。代码片段选取单元用于在当前的代码长度小于或等于整体长度时,获取起始地址,并从存储于ROM的整体代码中选取当前的代码长度和起始地址对应的代码片段作为当前的代码片段。
对应地,待压缩代码压缩模块170包括压缩单元(图未示)、最优选取单元(图未示)、长度更新单元(图未示)和压缩包获取单元(图未示)。
压缩单元用于根据当前的代码片段对应的当前滑动窗口和压缩字典,并采用滑动窗口压缩算法对待压缩代码进行压缩,得到基于当前的代码片段的待压缩代码的压缩文件。
最优选取单元用于将基于当前的代码片段的待压缩代码的压缩文件的体积与已存的最优体积进行比较,选用较小的体积更新已存的最优体积。
具体地,选用较小的体积更新已存的最优体积,包括:若基于当前的代码片段的待压缩代码的压缩文件的体积小于或等于已存的最优体积,则存储基于当前的代码片段的待压缩代码的压缩文件的体积作为新的最优体积;若基于当前的代码片段的待压缩代码的压缩文件的体积大于已存的最优体积,则保持已存的最优体积不变。
长度更新单元用于根据预设长度增加当前的代码长度得到新的当前的代码长度,并控制长度比较单元执行对应的功能。
具体地,长度更新单元用于在当前的代码长度的基础上增加预设长度得到新的当前的代码长度。
压缩包获取单元用于在当前的代码长度大于整体长度时,将已存的最优体积对应的压缩文件作为体积最小的压缩文件,得到待压缩代码的压缩包。
本实施例通过采用迭代方式进行代码长度的枚举,每一次迭代均完成基于当前的代码长度所对应的代码片段对待压缩代码进行压缩、并选取最优体积的操作,从而选出多个代码长度对应的代码片段中的最优,从而得到的压缩文件最优,处理方式简单。
在一实施例中,起始地址有多个。即,相同代码长度的代码片段有多个且起始地址不同。代码片段选取单元用于:在当前的代码长度小于或等于整体长度时,重置当前的起始地址为预设地址;根据当前的起始地址和当前的代码长度判断当前的起始地址是否越界;若当前的起始地址没有越界,则从存储于ROM的整体代码中选取当前的代码长度和当前的起始地址对应的代码片段作为当前的代码片段;若当前的起始地址越界,则控制执行长度更新单元的功能。
对应地,待压缩代码压缩模块170还包括地址更新单元(图未示),用于在最优选取单元之后、长度更新单元之前根据预设长度增加当前的起始地址得到新的当前的起始地址,并控制代码片段选取单元继续根据当前的起始地址和当前的代码长度判断当前的起始地址是否越界。
具体地,地址更新单元在当前的起始地址的基础上增加预设长度得到新的当前的起始地址。
本实施例通过采用迭代方式进行起始地址的枚举,每一次迭代均完成基于当前的代码长度和当前的起始地址所对应的代码片段对待压缩代码进行压缩、并选取最优体积的操作,从而选出多个代码长度对应的代码片段中的最优,得到的压缩文件最优,处理方式简单。
在一实施例中,代码片段选取单元具体可以计算在当前的起始地址的基础上增加当前的代码长度之后的地址得到更改地址,并获取整体代码的末尾地址;若更改地址大于整体代码的末尾地址,则判定当前的起始地址越界;若更改地址小于或等于整体代码的末尾地址,则判定当前的起始地址没有越界。
通过将当前的起始地址的基础上增加当前的代码长度之后得到的更改地址与整体代码的末尾地址进行比较,根据比较结果确定当前的起始地址是否越界,判断方式简单且准确。
在一实施例中,上述代码处理装置还包括解压模块(图未示),用于接收解压指令,根据解压指令获取待解压的压缩包,并获取待解压的压缩包所对应的存储于ROM的代码片段的区域范围;获取待解压的压缩包中当前数据块所对应的字典索引;若字典索引指向代码片段的区域范围内,则根据字典索引从代码片段中读取数据得到当前数据块的解压数据;若字典索引不指向代码片段的区域范围内,则根据字典索引读取对应的数据得到当前数据块的解压数据;若存在下一数据块,则读取下一数据块作为新的当前数据块,并返回继续获取待解压的压缩包中当前数据块所对应的字典索引。
由于待解压的压缩包由对代码片段和原始的待压缩代码进行压缩得到,因此解压待解压的压缩包得到的数据,是代码片段的数据和待压缩代码的数据中的一种。解压模块可在解压的过程区分字典索引指向的是在ROM中的代码片段还是原始的待压缩代码。
具体地,解压模块在不存在下一数据块时,将根据各个数据块所对应的字典索引读取对应的数据所得到的当前数据块的解压数据,作为最终的解压数据。如此,可提取出原始的待压缩代码。
一种可读存储介质,存储有计算机程序,存储的计算机程序被处理器执行时实现上述代码处理方法的步骤。
一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行计算机程序时实现上述代码处理方法的步骤。
上述可读存储介质和计算机设备,由于实现了上述代码处理方法,同理可提高对待压缩代码进行压缩的压缩率。
以上所述实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。
Claims (10)
1.一种代码处理方法,其特征在于,包括:
接收压缩指令,根据所述压缩指令获取待压缩代码;其中,所述待压缩代码为所述压缩指令指示的需要进行压缩的代码;
获取存储于ROM的代码片段;
采用滑动窗口压缩算法对所述代码片段进行压缩,得到压缩所述代码片段之后的当前滑动窗口和压缩字典;
根据所述代码片段对应的当前滑动窗口和压缩字典,并采用滑动窗口压缩算法对所述待压缩代码进行压缩,得到所述待压缩代码的压缩包。
2.根据权利要求1所述的代码处理方法,其特征在于,所述代码片段有多个;所述根据所述代码片段对应的当前滑动窗口和压缩字典,并采用滑动窗口压缩算法对所述待压缩代码进行压缩,得到所述待压缩代码的压缩包,包括:
分别根据各代码片段对应的当前滑动窗口和压缩字典,并采用滑动窗口压缩算法对所述待压缩代码进行压缩,得到基于各代码片段的所述待压缩代码的压缩文件,从多个压缩文件中选取体积最小的压缩文件,得到所述待压缩代码的压缩包。
3.根据权利要求2所述的代码处理方法,其特征在于,多个代码片段为存储于ROM中同一个整体代码中的片段,各代码片段的代码长度不同,所述获取存储于ROM的代码片段,包括:
初始化当前的代码长度为预设长度;
将当前的代码长度与所述整体代码的整体长度比较;
若当前的代码长度小于或等于所述整体长度,则获取起始地址,并从存储于ROM的所述整体代码中选取当前的代码长度和所述起始地址对应的代码片段作为当前的代码片段;
所述分别根据各代码片段对应的当前滑动窗口和压缩字典,并采用滑动窗口压缩算法对所述待压缩代码进行压缩,得到基于各代码片段的所述待压缩代码的压缩文件,从多个压缩文件中选取体积最小的压缩文件,得到所述待压缩代码的压缩包,包括:
根据当前的代码片段对应的当前滑动窗口和压缩字典,并采用滑动窗口压缩算法对所述待压缩代码进行压缩,得到基于当前的代码片段的所述待压缩代码的压缩文件;
将基于当前的代码片段的所述待压缩代码的压缩文件的体积与已存的最优体积进行比较,选用较小的体积更新已存的最优体积;
根据预设长度增加当前的代码长度得到新的当前的代码长度,并返回所述将当前的代码长度与所述整体代码的整体长度比较的步骤;
若当前的代码长度大于所述整体长度,则将已存的最优体积对应的压缩文件作为体积最小的压缩文件,得到所述待压缩代码的压缩包。
4.根据权利要求3所述的代码处理方法,其特征在于,包括:所述起始地址有多个;所述若当前的代码长度小于或等于所述整体长度,则获取起始地址,并从存储于ROM的所述整体代码中选取当前的代码长度和所述起始地址对应的代码片段作为当前的代码片段,包括:
若当前的代码长度小于或等于所述整体长度,则重置当前的起始地址为预设地址;
根据当前的起始地址和当前的代码长度判断当前的起始地址是否越界;
若当前的起始地址没有越界,则从存储于ROM的所述整体代码中选取当前的代码长度和当前的起始地址对应的代码片段作为当前的代码片段;
所述将基于当前的代码片段的所述待压缩代码的压缩文件的体积与已存的最优体积进行比较,选用较小的体积更新已存的最优体积之后、所述根据预设长度增加当前的代码长度得到新的当前的代码长度之前,还包括:
根据所述预设长度增加当前的起始地址得到新的当前的起始地址,并返回所述根据当前的起始地址和当前的代码长度判断当前的起始地址是否越界的步骤;
若当前的起始地址越界,则执行所述根据预设长度增加当前的代码长度得到新的当前的代码长度的步骤。
5.根据权利要求4所述的代码处理方法,其特征在于,所述根据当前的起始地址和当前的代码长度判断当前的起始地址是否越界,包括:
计算在当前的起始地址的基础上增加所述当前的代码长度之后的地址得到更改地址,并获取所述整体代码的末尾地址;
若更改地址大于所述整体代码的末尾地址,则判定当前的起始地址越界;
若更改地址小于或等于所述整体代码的末尾地址,则判定当前的起始地址没有越界。
6.根据权利要求1所述的代码处理方法,其特征在于,还包括解压步骤:
接收解压指令,根据所述解压指令获取待解压的压缩包,并获取所述待解压的压缩包所对应的存储于ROM的代码片段的区域范围;
获取所述待解压的压缩包中当前数据块所对应的字典索引;
若所述字典索引指向所述代码片段的区域范围内,则根据所述字典索引从代码片段中读取数据得到当前数据块的解压数据;
若所述字典索引不指向代码片段的区域范围内,则根据所述字典索引读取对应的数据得到当前数据块的解压数据;
若存在下一数据块,则读取下一数据块作为新的当前数据块,并返回所述获取所述待解压的压缩包中当前数据块所对应的字典索引的步骤。
7.一种代码处理装置,其特征在于,包括:
待压缩代码获取模块,用于接收压缩指令,根据所述压缩指令获取待压缩代码;
代码片段获取模块,用于获取存储于ROM的代码片段;
代码片段压缩模块,用于采用滑动窗口压缩算法对所述代码片段进行压缩,得到压缩所述代码片段之后的当前滑动窗口和压缩字典;
待压缩代码压缩模块,用于根据所述代码片段对应的当前滑动窗口和压缩字典,并采用滑动窗口压缩算法对所述待压缩代码进行压缩,得到所述待压缩代码的压缩包。
8.根据权利要求7所述的代码处理装置,其特征在于,所述代码片段有多个;所述待压缩代码压缩模块用于:分别根据各代码片段对应的当前滑动窗口和压缩字典,并采用滑动窗口压缩算法对所述待压缩代码进行压缩,得到基于各代码片段的所述待压缩代码的压缩文件,从多个压缩文件中选取体积最小的压缩文件,得到所述待压缩代码的压缩包。
9.一种可读存储介质,存储有计算机程序,其特征在于,存储的计算机程序被处理器执行时实现如权利要求1-6中任一项所述方法的步骤。
10.一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现如权利要求1-6任一项所述方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710875450.9A CN107729051B (zh) | 2017-09-25 | 2017-09-25 | 代码处理方法、装置、可读存储介质和计算机设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710875450.9A CN107729051B (zh) | 2017-09-25 | 2017-09-25 | 代码处理方法、装置、可读存储介质和计算机设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107729051A CN107729051A (zh) | 2018-02-23 |
CN107729051B true CN107729051B (zh) | 2020-06-16 |
Family
ID=61206801
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710875450.9A Active CN107729051B (zh) | 2017-09-25 | 2017-09-25 | 代码处理方法、装置、可读存储介质和计算机设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107729051B (zh) |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103078646A (zh) * | 2012-12-31 | 2013-05-01 | 上海宇芯科技有限公司 | 字典查询压缩、解压缩方法及其装置 |
CN103138764A (zh) * | 2011-11-22 | 2013-06-05 | 上海麦杰科技股份有限公司 | 一种实时数据无损压缩方法及系统 |
CN104850577A (zh) * | 2015-03-19 | 2015-08-19 | 浙江工商大学 | 一种基于有序复合树结构的数据流最大频繁项集挖掘方法 |
CN106936439A (zh) * | 2016-09-20 | 2017-07-07 | 南开大学 | 一种通用的基于分块排序思想的压缩预处理方法及应用 |
CN106960059A (zh) * | 2017-04-06 | 2017-07-18 | 山东大学 | 一种基于分段线性表示的时间序列流数据降维与简化表示方法 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6650261B2 (en) * | 2001-09-06 | 2003-11-18 | Xerox Corporation | Sliding window compression method utilizing defined match locations |
US7507897B2 (en) * | 2005-12-30 | 2009-03-24 | Vtech Telecommunications Limited | Dictionary-based compression of melody data and compressor/decompressor for the same |
-
2017
- 2017-09-25 CN CN201710875450.9A patent/CN107729051B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103138764A (zh) * | 2011-11-22 | 2013-06-05 | 上海麦杰科技股份有限公司 | 一种实时数据无损压缩方法及系统 |
CN103078646A (zh) * | 2012-12-31 | 2013-05-01 | 上海宇芯科技有限公司 | 字典查询压缩、解压缩方法及其装置 |
CN104850577A (zh) * | 2015-03-19 | 2015-08-19 | 浙江工商大学 | 一种基于有序复合树结构的数据流最大频繁项集挖掘方法 |
CN106936439A (zh) * | 2016-09-20 | 2017-07-07 | 南开大学 | 一种通用的基于分块排序思想的压缩预处理方法及应用 |
CN106960059A (zh) * | 2017-04-06 | 2017-07-18 | 山东大学 | 一种基于分段线性表示的时间序列流数据降维与简化表示方法 |
Also Published As
Publication number | Publication date |
---|---|
CN107729051A (zh) | 2018-02-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110799959B (zh) | 一种数据压缩方法与解压方法以及相关设备 | |
US6570511B1 (en) | Data compression method and apparatus implemented with limited length character tables and compact string code utilization | |
US9509334B2 (en) | Non-transitory computer-readable recording medium, compression method, decompression method, compression device and decompression device | |
US8572054B2 (en) | Forward compatibility guaranteed data compression and decompression method and apparatus thereof | |
US20130167133A1 (en) | Method, terminal and system for upgrading software version | |
WO2017128763A1 (zh) | 数据压缩装置及方法 | |
US12003580B2 (en) | Techniques for updating files | |
CN110419036B (zh) | 数据压缩方法、设备与计算设备 | |
US20190052284A1 (en) | Data compression apparatus, data decompression apparatus, data compression program, data decompression program, data compression method, and data decompression method | |
CN108880559B (zh) | 数据压缩方法、数据解压缩方法、压缩设备及解压缩设备 | |
CN109088636B (zh) | 一种数据处理方法、系统及电子设备和存储介质 | |
CN107729051B (zh) | 代码处理方法、装置、可读存储介质和计算机设备 | |
CN110888918A (zh) | 相似数据检测方法及装置、计算机设备和存储介质 | |
CN116303297B (zh) | 文件压缩处理方法、装置、设备及介质 | |
CN113542225A (zh) | 一种数据的压缩方法、装置、终端设备及存储介质 | |
US20230132037A1 (en) | Storage system and data processing method in storage system | |
US9496895B2 (en) | Compression method and decompression method | |
JP5100500B2 (ja) | データ書き換えシステム及び新版データ作成装置及び差分データ作成装置及び新版データ作成プログラム及び差分データ作成プログラム | |
CN112818347A (zh) | 一种文件标签确定方法、装置、设备及存储介质 | |
JP2021174472A (ja) | ストレージシステム | |
CN115225725B (zh) | 数据压缩存储方法、装置、车辆及存储介质 | |
CN105282554A (zh) | 解码方法及解码装置 | |
KR101597637B1 (ko) | Fpga 이미지 다운로드시 네트워크 부하를 경감하기 위한 압축 방법 | |
US11108405B2 (en) | Devices and methods for compression and decompression | |
JP2023039698A (ja) | データ圧縮装置およびメモリシステム |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CP02 | Change in the address of a patent holder |
Address after: 519000 No. 333, Kexing Road, Xiangzhou District, Zhuhai City, Guangdong Province Patentee after: ZHUHAI JIELI TECHNOLOGY Co.,Ltd. Address before: Floor 1-107, building 904, ShiJiHua Road, Zhuhai City, Guangdong Province Patentee before: ZHUHAI JIELI TECHNOLOGY Co.,Ltd. |
|
CP02 | Change in the address of a patent holder |