首页 / 专利分类库 / 基本电子电路 / 一种文件压缩方法、装置、电子设备及存储介质

一种文件压缩方法、装置、电子设备及存储介质

申请号 CN202410008259.4 申请日 2024-01-03 公开(公告)号 CN117891782A 公开(公告)日 2024-04-16
申请人 上海集度汽车有限公司; 发明人 徐安奇;
摘要 本 申请 涉及 数据处理 技术领域,尤其涉及一种文件压缩方法、装置、 电子 设备及存储介质。其中,方法包括:基于待压缩文件对应的压缩文件中当前记录的已压缩长度,确定本次压缩的起始 位置 ,已压缩长度表征:待压缩文件成功压缩的数据量;从起始位置,按照预设的压缩步长,将待压缩文件中对应的待压缩数据段,压缩后写入压缩文件中;更新已压缩长度和压缩文件中当前记录的有效长度,有效长度表征:压缩文件成功写入的数据量。这样,记录压缩进度,分段压缩,节约了文件压缩的资源成本,提高了压缩效率。
权利要求

1.一种文件压缩方法,其特征在于,包括:
基于待压缩文件对应的压缩文件中当前记录的已压缩长度,确定本次压缩的起始位置,所述已压缩长度表征:所述待压缩文件成功压缩的数据量;
从所述起始位置,按照预设的压缩步长,将所述待压缩文件中对应的待压缩数据段,压缩后写入所述压缩文件中;
更新所述已压缩长度和所述压缩文件中当前记录的有效长度,所述有效长度表征:所述压缩文件成功写入的数据量。
2.如权利要求1所述的方法,其特征在于,在基于待压缩文件对应的压缩文件中当前记录的已压缩长度,确定本次压缩的起始位置之前,还包括:
创建待压缩文件对应的压缩文件,并在所述压缩文件中写入新增头部数据,其中,所述新增头部数据至少包括:所述待压缩文件的已压缩长度和所述压缩文件的有效长度。
3.如权利要求1所述的方法,其特征在于,更新所述已压缩长度和所述压缩文件中当前记录的有效长度之后,还包括:
当本次压缩中断后重启时,确定所述待压缩文件的完成结果,并在所述完成结果表征为未完成时,读取所述压缩文件中当前记录的有效长度,以及获取所述压缩文件的物理长度,所述物理长度表征:所述压缩文件的大小;
若所述物理长度大于所述当前记录的有效长度,则确定所述压缩文件异常,并删除所述压缩文件中,不属于所述有效长度的数据,重新执行所述本次压缩;
若所述物理长度等于所述当前记录的有效长度,则确定所述压缩文件正常,并执行下一次压缩。
4.如权利要求3所述的方法,其特征在于,所述确定所述待压缩文件的完成结果,包括:
读取所述压缩文件中当前记录的状态标识,其中,所述状态标识表征:所述待压缩文件的压缩状态;
若所述当前记录的状态标识为目标标识,则确定所述待压缩文件压缩的完成结果为未完成;
若所述当前记录的状态标识不为目标标识,则确定所述待压缩文件压缩的完成结果为完成。
5.如权利要求1所述的方法,其特征在于,所述从所述起始位置,按照预设的压缩步长,将所述待压缩文件中对应的待压缩数据段,压缩后写入所述压缩文件中,包括:
从所述起始位置,按照预设的压缩步长,读取所述待压缩文件中对应的待压缩数据段;
压缩所述待压缩数据段,获得相应的压缩产物;
将所述压缩产物写入至所述压缩文件中。
6.如权利要求5所述的方法,其特征在于,所述更新所述已压缩长度和所述压缩文件中当前记录的有效长度,包括:
若所述压缩产物写入成功,则基于所述待压缩数据段对应的第一字节长度,更新所述当前记录的已压缩长度,并基于所述压缩产物对应的第二字节长度,更新所述当前记录的有效长度;
若所述压缩产物写入失败,则不更新所述当前记录的已压缩长度和有效长度。
7.如权利要求2所述的方法,其特征在于,所述更新所述已压缩长度和所述压缩文件中当前记录的有效长度之后,还包括:
当最后一段待压缩数据段压缩并写入所述压缩文件之后,删除所述压缩文件中的新增头部数据,获得目标文件。
8.一种文件压缩装置,其特征在于,包括:
确定模,用于基于待压缩文件对应的压缩文件中当前记录的已压缩长度,确定本次压缩的起始位置,所述已压缩长度表征:所述待压缩文件成功压缩的数据量;
压缩模块,用于从所述起始位置,按照预设的压缩步长,将所述待压缩文件中对应的待压缩数据段,压缩后写入所述压缩文件中;
更新模块,用于更新所述已压缩长度和所述压缩文件中当前记录的有效长度,所述有效长度表征:所述压缩文件成功写入的数据量。
9.一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现权利要求1‑7任一项所述方法的步骤。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于:所述计算机程序被处理器执行时实现权利要求1‑7任一项所述方法的步骤。
11.一种计算机程序产品,其特征在于,包括计算机程序,所述计算机程序存储在计算机可读存储介质中;当电子设备的处理器从所述计算机可读存储介质读取所述计算机程序时,所述处理器执行所述计算机程序,使得所述电子设备执行权利要求1‑7任一项所述方法的步骤。
12.一种车辆,其特征在于,所述车辆包括如权利要求8所述的装置。

说明书全文

一种文件压缩方法、装置、电子设备及存储介质

技术领域

[0001] 本申请涉及数据处理技术领域,尤其涉及一种文件压缩方法、装置、电子设备及存储介质。

背景技术

[0002] 文件压缩能够减小文件的大小,在文件传输时,先对文件进行压缩,使文件能够通过较慢的互联网连接实现更快传输,节约了流量和传输时间。另外,存储文件时,文件进行了压缩,还可以减少文件的磁盘占用空间。
[0003] 然而,由于有些待压缩文件较大,因此压缩时长也较长,在压缩过程中会出现造成压缩中断的异常状况,例如,处理设备休眠和断电等异常状况。在异常状况恢复后,常常会得到一份压缩不完整的已压缩文件,已压缩文件包含的数据不准确,只能将整个已压缩文件舍弃,重新对整个待压缩文件进行压缩,不仅耗时长,而且浪费了之前的压缩产物。
[0004] 因此,如何节约文件压缩的资源成本,是目前需要解决的问题。发明内容
[0005] 本申请实施例提供一种文件压缩方法、装置、电子设备及存储介质,以节约文件压缩的资源成本。
[0006] 本申请实施例提供的具体技术方案如下:
[0007] 第一方面,提供一种文件压缩方法,包括:
[0008] 基于待压缩文件对应的压缩文件中当前记录的已压缩长度,确定本次压缩的起始位置,已压缩长度表征:待压缩文件成功压缩的数据量;
[0009] 从起始位置,按照预设的压缩步长,将待压缩文件中对应的待压缩数据段,压缩后写入压缩文件中;
[0010] 更新已压缩长度和压缩文件中当前记录的有效长度,有效长度表征:压缩文件成功写入的数据量。
[0011] 第二方面,提供一种文件压缩装置,包括:
[0012] 确定模,用于基于待压缩文件对应的压缩文件中当前记录的已压缩长度,确定本次压缩的起始位置,已压缩长度表征:待压缩文件成功压缩的数据量;
[0013] 压缩模块,用于从起始位置,按照预设的压缩步长,将待压缩文件中对应的待压缩数据段,压缩后写入压缩文件中;
[0014] 更新模块,用于更新已压缩长度和压缩文件中当前记录的有效长度,有效长度表征:压缩文件成功写入的数据量。
[0015] 可选的,在基于待压缩文件对应的压缩文件中当前记录的已压缩长度,确定本次压缩的起始位置之前,所述装置还包括创建模块,创建模块用于:
[0016] 创建待压缩文件对应的压缩文件,并在压缩文件中写入新增头部数据,其中,新增头部数据至少包括:待压缩文件的已压缩长度和压缩文件的有效长度。
[0017] 可选的,更新已压缩长度和压缩文件中当前记录的有效长度之后,所述装置还包括重启模块,重启模块用于:
[0018] 当本次压缩中断后重启时,确定待压缩文件的完成结果,并在完成结果表征为未完成时,读取压缩文件中当前记录的有效长度,以及获取压缩文件的物理长度,物理长度表征:压缩文件的大小;
[0019] 若物理长度大于当前记录的有效长度,则确定压缩文件异常,并删除压缩文件中,不属于有效长度的数据,重新执行本次压缩;
[0020] 若物理长度等于当前记录的有效长度,则确定压缩文件正常,并执行下一次压缩。
[0021] 可选的,确定待压缩文件的完成结果,重启模块还用于:
[0022] 读取压缩文件中当前记录的状态标识,其中,状态标识表征:待压缩文件的压缩状态;
[0023] 若当前记录的状态标识为目标标识,则确定待压缩文件压缩的完成结果为未完成;
[0024] 若当前记录的状态标识不为目标标识,则确定待压缩文件压缩的完成结果为完成。
[0025] 可选的,从起始位置,按照预设的压缩步长,将待压缩文件中对应的待压缩数据段,压缩后写入压缩文件中时,压缩模块还用于:
[0026] 从起始位置,按照预设的压缩步长,读取待压缩文件中对应的待压缩数据段;
[0027] 压缩待压缩数据段,获得相应的压缩产物;
[0028] 将压缩产物写入至压缩文件中。
[0029] 可选的,更新已压缩长度和压缩文件中当前记录的有效长度时,更新模块还用于:
[0030] 若压缩产物写入成功,则基于待压缩数据段对应的第一字节长度,更新当前记录的已压缩长度,并基于压缩产物对应的第二字节长度,更新当前记录的有效长度。
[0031] 若压缩产物写入失败,则不更新当前记录的已压缩长度和有效长度。
[0032] 可选的,更新已压缩长度和压缩文件中当前记录的有效长度之后,所述装置还包括删除模块,删除模块用于:
[0033] 当最后一段待压缩数据段压缩并写入压缩文件之后,删除压缩文件中的新增头部数据,获得目标文件。
[0034] 第三方面,提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上述第一方面任一项所述方法的步骤。
[0035] 第四方面,提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述第一方面任一项所述方法的步骤。
[0036] 第五方面,提供一种计算机程序产品,所述计算机程序产品包括计算机程序,所述计算机程序存储在计算机可读存储介质中;当电子设备的处理器从计算机可读存储介质读取所述计算机程序时,所述处理器执行所述计算机程序,使得所述电子设备执行上述第一方面任一项所述方法的步骤。
[0037] 第六方面,提供一种车辆,其上存储有文件压缩装置,执行上述第一方面任一项所述方法的步骤。
[0038] 本申请实施例中,基于待压缩文件对应的压缩文件中当前记录的已压缩长度,确定本次压缩的起始位置,然后从起始位置,按照预设的压缩步长,将待压缩文件中对应的待压缩数据段,压缩后写入压缩文件中,再更新已压缩长度和压缩文件中当前记录的有效长度。这样,将待压缩文件分成若干段,每次压缩一段待压缩数据,将已压缩长度和压缩文件的有效长度进行记录,通过记录的压缩进度,在重启后,接着压缩后面的数据,避免了将已压缩文件完全舍弃,重新对整个待压缩文件进行压缩,节约了文件压缩的资源成本,提高了压缩效率。附图说明
[0039] 图1为本申请实施例中可能的应用场景示意图;
[0040] 图2为本申请实施例中一种文件压缩方法的第一实施流程图
[0041] 图3为本申请实施例中压缩待压缩数据段的流程示意图;
[0042] 图4为本申请实施例中压缩待压缩数据段的示意图;
[0043] 图5为本申请实施例中更新新增头部数据的示意图;
[0044] 图6为本申请实施例中压缩重启的流程示意图;
[0045] 图7为本申请实施例中确定待压缩文件的完成结果的流程示意图;
[0046] 图8为本申请实施例中重新执行本次压缩的示意图;
[0047] 图9为本申请实施例中删除新增头部数据的示意图;
[0048] 图10为本申请实施例中一种文件压缩方法的第二流程示意图;
[0049] 图11为本申请实施例中文件压缩装置的结构示意图;
[0050] 图12为本申请实施例中电子设备的结构示意图。

具体实施方式

[0051] 下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,并不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
[0052] 为便于理解本申请实施例提供的技术方案,这里先对本申请实施例使用的一些关键名词进行解释:
[0053] 核心转储(coredump)文件:是指在程序运行过程中发生了严重错误或崩溃时,操作系统会将程序的内存状态、寄存器值、堆栈信息等,保存到一个特殊的文件中,这个文件就是coredump文件,coredump文件有助于开发人员在程序崩溃后进行调试和分析。当程序发生以下情况之一时,通常会生成coredump文件:程序崩溃,当程序执行过程中发生了未处理的异常、段错误、内存访问越界等错误,导致程序无法继续执行时,操作系统会生成core dump文件;手动触发,开发对象可以通过向程序发送特殊信号来触发coredump的生成。
[0054] 电子控制器单元(Electronic Control Unit,ECU):又称汽车的“行车电脑”。
[0055] 下面对本申请实施例的设计思想进行简要介绍:
[0056] 文件压缩能够减小文件的大小,在文件传输时,先对文件进行压缩,使文件能够通过较慢的互联网连接实现更快传输,节约了流量和传输时间。另外,存储文件时,文件进行了压缩,还可以减少文件的磁盘占用空间。
[0057] 然而,由于有些待压缩文件较大,因此压缩时长也较长,在压缩过程中会出现造成压缩中断的异常状况,例如,处理设备休眠和断电等异常状况。在异常状况恢复后,常常会得到一份压缩不完整的已压缩文件,已压缩文件包含的数据不准确,只能将整个已压缩文件舍弃,重新对整个待压缩文件进行压缩,不仅耗时长,而且浪费了之前的压缩产物。
[0058] 例如,在智能汽车领域,ECU的功能越来越强大,其上运行的程序越来越多,在其进程异常退出时会生成coredump文件,需要将coredump文件通过超文本安全传输协议(Hypertext Transfer Protocol Secure,HTTPS)传输到服务器,以供开发对象排查问题,由于coredump文件通常较大,因此传输时,需要先压缩coredump文件。在实际使用中,为了节约电量,ECU经常需要进入休眠状态,这时ECU会停止绝大部分功能,包括压缩功能,在coredump文件压缩过程中,当ECU休眠或者汽车熄火断电时,唤醒后常常会得到一份压缩不完整的coredump文件,这种不完整的coredump文件解压出来也无法分析,因此需要将其删除,并重新进行压缩,浪费了时间成本,开发对象也无法及时获取coredump文件。
[0059] 有鉴于此,本申请实施例中,提供一种文件压缩方法、装置、电子设备及存储介质,先基于待压缩文件对应的压缩文件中当前记录的已压缩长度,确定本次压缩的起始位置,已压缩长度表征:待压缩文件成功压缩的数据量,然后从起始位置,按照预设的压缩步长,将待压缩文件中对应的待压缩数据段,压缩后写入压缩文件中,最后更新已压缩长度和压缩文件中当前记录的有效长度,有效长度表征:压缩文件成功写入的数据量。
[0060] 这样,将待压缩文件分成若干段,每次压缩一段待压缩数据,通过记录已压缩长度和压缩文件的有效长度,可以记录压缩进度,并在重启后,基于压缩进度,接着压缩剩下的数据,避免了将已压缩文件完全舍弃,重新对整个待压缩文件进行压缩,节约了文件压缩的资源成本,提高了压缩效率。
[0061] 以下结合说明书附图对本申请的优选实施例进行说明,应当理解,此处所描述的优选实施例仅用于说明和解释本申请,并不用于限定本申请,并且在不冲突的情况下,本申请实施例及实施例中的特征可以相互组合。
[0062] 参阅图1所示,为本申请实施例中可能的应用场景示意图。该应用场景图中,包括处理设备110。处理设备将待压缩文件进行压缩,获得压缩后的目标文件。
[0063] 处理设备110可以为ECU,本申请实施例中对此并不进行限制。
[0064] 下面结合上述描述的应用场景,参考附图来描述本申请示例性实施方式提供的文件压缩方法,需要注意的是,上述应用场景仅是为了便于理解本申请的精神和原理而示出,本申请的实施方式在此方面不受任何限制。
[0065] 参阅图2所示,为本申请实施例提供的一种文件压缩方法的第一实施流程图,该方法的具体实施流程如下:
[0066] 步骤20:基于待压缩文件对应的压缩文件中当前记录的已压缩长度,确定本次压缩的起始位置。
[0067] 其中,已压缩长度表征:待压缩文件成功压缩的数据量。
[0068] 可选的,本申请实施例中,在压缩待压缩文件之后,先创建待压缩文件对应的压缩文件。
[0069] 具体的,本申请实施例中,创建待压缩文件对应的压缩文件,并在压缩文件中写入新增头部数据。
[0070] 其中,新增头部数据至少包括:状态标识、待压缩文件的已压缩长度和压缩文件的有效长度。
[0071] 例如,假设新增头部数据中状态标识为2字节,待压缩文件的已压缩长度为4字节,压缩文件的有效长度为4字节,状态标识的初始值为0x5a5a,待压缩文件的已压缩长度的初始值为0x00000000,压缩文件的有效长度的初始值为0x00000000,则新增头部数据为10字节,创建压缩文件时,新增头部数据的初始值为0x5a5a0000000000000000。
[0072] 这样,创建格式包含新增头部数据的压缩文件,通过新增头部数据记录压缩进度,便于基于压缩进度,接着压缩剩下的数据。
[0073] 本申请实施例中,依次对待压缩文件中的各待压缩数据段进行压缩,并在待压缩文件压缩完成后,输出最终的压缩文件。其中,每次压缩,先读取压缩文件中的新增头部数据,获取当前记录的已压缩长度,基于当前记录的已压缩长度,确定待压缩文件中,本次压缩的起始位置。
[0074] 其中,各待压缩数据段是根据相应的压缩步长确定的,各压缩步长可以相同也可以不同,本申请实施例中对此并不进行限制。
[0075] 例如,假设读取当前的压缩文件中的新增头部数据,获取当前记录的已压缩长度为0x00000000,则本次压缩的起始位置为0。
[0076] 步骤21:从起始位置,按照预设的压缩步长,将待压缩文件中对应的待压缩数据段,压缩后写入压缩文件中。
[0077] 具体的,执行步骤21时,具体执行以下操作。参阅图3所示,其为本申请实施例中压缩待压缩数据段的流程示意图,下面结合附图3,对具体执行的操作进行详细说明:
[0078] 步骤210:从起始位置,按照预设的压缩步长,读取待压缩文件中对应的待压缩数据段。
[0079] 本申请实施例中,获得起始位置之后,从起始位置,按照预设的压缩步长,读待压缩文件,获得对应的待压缩数据段。
[0080] 例如,参阅图4所示,为本申请实施例中压缩待压缩数据段的示意图,假设本次压缩的起始位置为0,预设的压缩步长为2048字节,则待压缩数据段为待压缩文件中的前2048字节的数据。
[0081] 步骤211:压缩待压缩数据段,获得相应的压缩产物。
[0082] 本申请实施例中,待压缩数据段压缩完成后,得到待压缩数据段对应的压缩产物。
[0083] 例如,如图4所示,压缩待压缩数据段,获得相应的压缩产物A。
[0084] 步骤212:将压缩产物写入至压缩文件中。
[0085] 本申请实施例中,将压缩产物写入至压缩文件中的文件内容中。
[0086] 例如,将压缩产物A写入压缩文件的文件内容中。
[0087] 这样,根据起始位置,获得待压缩数据段,压缩待压缩数据段,获得对应的压缩产物,将压缩产物A写入压缩文件中,能够实现每次只压缩一段待压缩数据段,实现分段压缩。
[0088] 步骤22:更新已压缩长度和压缩文件中当前记录的有效长度。
[0089] 其中,有效长度表征:压缩文件成功写入的数据量。
[0090] 具体的,本申请实施例中,更新压缩文件中当前记录的已压缩长度和有效长度时,具体可执行以下操作:若压缩产物写入成功,则基于待压缩数据段对应的第一字节长度,更新当前记录的已压缩长度,并基于压缩产物对应的第二字节长度,更新当前记录的有效长度。
[0091] 本申请实施例中,判断压缩产物是否写入成功,当压缩产物写入成功时,基于待压缩数据段对应的第一字节长度和当前记录的已压缩长度,计算更新后的已压缩长度,并基于压缩产物对应的第二字节长度和当前记录的有效长度,计算更新后的有效长度。
[0092] 其中,当压缩产物完整写入至压缩文件中之后,则确定压缩产物写入成功。
[0093] 例如,参阅图5所示,为本申请实施例中更新新增头部数据的示意图,压缩产物A已经写入至压缩文件的文件内容中,待压缩数据段对应的第一字节长度为2048字节,压缩产物A对应的第二字节长度为1024字节,已压缩长度为0x00000000,有效长度为0x00000000,则将压缩文件中的新增头部数据包含的已压缩长度更新为:0x00000000+2048字节=0x00000800,将压缩文件中的新增头部数据包含的有效长度更新为:0x00000000+1024字节=0x00000400。
[0094] 另外,值得说明的是,在更新新增头部数据时,可以将文件指针调整到对应的数据位置,在更新新增头部数据之后,再将文件指针调整到压缩文件的末尾。
[0095] 例如,在假设新增头部数据中状态标识为2字节,待压缩文件的已压缩长度为4字节,压缩文件的有效长度为4字节,更新已压缩长度,则将文件指针调整到前面2字节的末尾,写入更新后的已压缩长度。
[0096] 这样,在写入成功时,更新新增头部数据,通过记录已压缩长度,便于下一次压缩从本次压缩的结束位置开始压缩,避免每段待压缩数据段有重复数据,提高分段压缩的准确度。
[0097] 另外,值得说明的是,本申请实施例中,若压缩产物写入失败,则不更新当前记录的已压缩长度和有效长度。
[0098] 本申请实施例中,判断压缩产物是否写入成功,当压缩产物写入失败时,不更新当前记录的已压缩长度和有效长度。
[0099] 其中,由于压缩中断可能会出现在每次压缩中的压缩产物写入过程,也可能出现在每次压缩中的压缩产物获得过程,因此当压缩产物未完整写入至压缩文件中时,或者获得压缩产物失败时,确定压缩产物写入失败。
[0100] 进一步地,在待压缩文件的压缩过程中,可能出现压缩中断,当压缩中断后重启时,具体执行以下操作。参阅图6所示,其为本申请实施例中压缩重启的流程示意图,下面结合附图6,对具体执行的操作进行详细说明:
[0101] 步骤60:当本次压缩中断后重启时,确定待压缩文件的完成结果,并在完成结果表征为未完成时,读取压缩文件中当前记录的有效长度,以及获取压缩文件的物理长度。
[0102] 其中,物理长度表征:压缩文件的大小。
[0103] 本申请实施例中,确定待压缩文件的完成结果,判断完成结果是否表征为未完成,若完成结果表征为未完成,则读取压缩文件中的新增头部数据,获得当前记录的有效长度,以及获取压缩文件的物理长度,若完成结果表征为完成,则结束压缩。
[0104] 具体的,本申请实施例中,确定待压缩文件的完成结果时,具体执行以下操作。参阅图7所示,其为本申请实施例中确定待压缩文件的完成结果的流程示意图,下面结合附图7,对具体执行的操作进行详细说明:
[0105] 步骤600:读取压缩文件中当前记录的状态标识。
[0106] 其中,状态标识表征:待压缩文件的压缩状态。
[0107] 本申请实施例中,读取压缩文件中的新增头部数据,获得当前记录的状态标识。
[0108] 例如,假设新增头部数据为:0x5a5a0000080000000400,状态标识为前面2字节,则当前记录的状态标识为0x5a5a。
[0109] 步骤601:判断当前记录的状态标识是否为目标标识,若是,则执行步骤602,否则,则执行步骤603。
[0110] 其中,目标标识表征待压缩文件未完成压缩。
[0111] 步骤602:确定待压缩文件压缩的完成结果为未完成。
[0112] 本申请实施例中,判断当前记录的状态标识是否为目标标识,若当前记录的状态标识为目标标识,则确定待压缩文件压缩的完成结果为未完成。
[0113] 例如,假设目标标识为0x5a5a,当前记录的状态标识为0x5a5a,则确定待压缩文件压缩的完成结果为未完成。
[0114] 步骤603:确定待压缩文件压缩的完成结果为完成。
[0115] 本申请实施例中,判断当前记录的状态标识是否为目标标识,若当前记录的状态标识不为目标标识,则确定待压缩文件压缩的完成结果为完成。
[0116] 例如,假设目标标识为0x5a5a,当前记录的状态标识为空,则确定待压缩文件压缩的完成结果为完成。
[0117] 这样,重启后,通过识别新增头部数据中的状态标识,确定是否要继续压缩待压缩文件,进一步地,将状态标识设置在新增头部数据的最前面,只需要读取前面的字节,即可确定是否要继续压缩待压缩文件,提高了效率,节约了时间成本。
[0118] 步骤61:判断物理长度是否大于当前记录的有效长度,若是,则执行步骤62,否则,则执行步骤63。
[0119] 步骤62:确定压缩文件异常,并删除压缩文件中,不属于有效长度的数据,重新执行本次压缩。
[0120] 本申请实施例中,判断物理长度是否大于当前记录的有效长度,若物理长度大于当前记录的有效长度,则确定压缩文件异常,并删除压缩文件的文件内容中,不属于有效长度的数据,以及读取压缩文件中的新增头部数据,获取当前记录的已压缩长度,然后基于当前记录的已压缩长度,确定待压缩文件中,本段压缩的起始位置,并从起始位置,按照预设的压缩步长,将待压缩文件中对应的待压缩数据段,压缩后写入压缩文件中,以及更新压缩文件中新增头部数据包含的当前记录的已压缩长度和有效长度。
[0121] 例如,参阅图8所示,为本申请实施例中重新执行本次压缩的示意图,假设压缩文件当前的 物理长度为 0x00 00500 5,压缩文 件中的新 增头部数据 为0x5a5a0000600000005001,当前记录的已压缩长度为0x00006000,当前记录的有效长度为
0x00005001,则确定压缩文件异常,删除压缩文件的文件内容中,不属于有效长度的数据,然后基于当前记录的已压缩长度0x00006000,确定本次压缩的起始位置为0x00006000字节,预设的压缩步长为2048字节,获得待压缩数据段B,压缩待压缩数据段B,获得相应的压缩产物B,将压缩产物B写入压缩文件的文件内容中,最后更新压缩文件中新增头部数据包含的当前记录的已压缩长度和有效长度。
[0122] 步骤63:确定压缩文件正常,并执行下一次压缩。
[0123] 本申请实施例中,判断物理长度是否大于当前记录的有效长度,若物理长度等于当前记录的有效长度,则确定压缩文件正常,并基于当前记录的已压缩长度执行下一段压缩。
[0124] 例如,假设压缩文件当前的物理长度为0x00005400,压缩文件中的新增头部数据为0x5a5a0000680000005010,当前记录的已压缩长度为0x00006800,当前记录的有效长度为0x00005400,则确定压缩文件正常,基于当前记录的已压缩长度0x00006800,确定下一段压缩的起始位置为0x00006800字节,执行下一段压缩。
[0125] 这样,重启后,基于压缩文件中记录的有效长度对压缩文件进行异常校验,能够检测出异常的压缩文件,基于压缩文件中记录的已压缩长度,继续压缩待压缩文件,压缩文件异常时,删除不属于有效长度的数据,获得正常的压缩文件,然后重新执行该段待压缩数据段的压缩,不需要重新对整个压缩文件进行压缩,使得之前的压缩产物得到了利用,节约了资源成本和时间成本。
[0126] 进一步地,为了避免压缩文件格式的不同,导致压缩文件在其他设备无法打开的情况,本申请实施例中,最后一段待压缩数据段压缩并写入压缩文件之后,即在待压缩文件压缩完成后,输出最终的压缩文件之后,删除最终的压缩文件中的新增头部数据,获得目标文件。这样,提高了压缩文件的通用性和可适用性。
[0127] 例如,参阅图9所示,为本申请实施例中删除新增头部数据的示意图,待压缩文件总共有0x00018000字节,将待压缩文件压缩完成后,得到最终的压缩文件,将最终的压缩文件中的新增头部数据删除,只保留包含各压缩产物的文件内容,获得目标文件。
[0128] 基于上述实施例,参阅图10所示,为本申请实施例中一种文件压缩方法的第二流程示意图,具体包括:
[0129] 步骤1001:判断是否存在待压缩文件对应的压缩文件,若是,则执行步骤1002,否则,则执行步骤1003。
[0130] 步骤1002:判断压缩文件中当前记录的状态标识是否等于目标标识,若是,则执行步骤1004,否则,则执行步骤1009。
[0131] 步骤1003:创建待压缩文件对应的压缩文件。
[0132] 其中,压缩文件中的新增头部数据包括:状态标识、待压缩文件的已压缩长度和压缩文件的有效长度。
[0133] 步骤1004:判断压缩文件中当前记录的有效长度是否不等于压缩文件的物理长度,若是,则执行步骤1005,否则,则执行步骤1006。
[0134] 步骤1005:删除压缩文件中,不属于有效长度的数据。
[0135] 步骤1006:基于压缩文件中当前记录的已压缩长度,确定本次压缩的起始位置,并从起始位置,按照预设的压缩步长,将待压缩文件中对应的待压缩数据段,压缩后写入压缩文件中,以及更新压缩文件中当前记录的已压缩长度和有效长度。
[0136] 步骤1007:判断待压缩文件是否压缩完成,若是,则执行步骤1008,否则,则执行步骤1006,直到待压缩文件压缩完成。
[0137] 步骤1008:删除压缩文件中的新增头部数据。
[0138] 步骤1009:结束,压缩完成。
[0139] 基于相同的发明构思,本申请实施例中还提供了一种文件压缩装置,参阅图11所示,为本申请实施例中文件压缩装置的结构示意图,具体包括:
[0140] 确定模块1101,用于基于待压缩文件对应的压缩文件中当前记录的已压缩长度,确定本次压缩的起始位置,已压缩长度表征:待压缩文件成功压缩的数据量;
[0141] 压缩模块1102,用于从起始位置,按照预设的压缩步长,将待压缩文件中对应的待压缩数据段,压缩后写入压缩文件中;
[0142] 更新模块1103,用于更新已压缩长度和压缩文件中当前记录的有效长度,有效长度表征:压缩文件成功写入的数据量。
[0143] 可选的,在基于待压缩文件对应的压缩文件中当前记录的已压缩长度,确定本次压缩的起始位置之前,所述装置还包括创建模块1104,创建模块1104用于:
[0144] 创建待压缩文件对应的压缩文件,并在压缩文件中写入新增头部数据,其中,新增头部数据至少包括:待压缩文件的已压缩长度和压缩文件的有效长度。
[0145] 可选的,更新已压缩长度和压缩文件中当前记录的有效长度之后,所述装置还包括重启模块1105,重启模块1105用于:
[0146] 当本次压缩中断后重启时,确定待压缩文件的完成结果,并在完成结果表征为未完成时,读取压缩文件中当前记录的有效长度,以及获取压缩文件的物理长度,物理长度表征:压缩文件的大小;
[0147] 若物理长度大于当前记录的有效长度,则确定压缩文件异常,并删除压缩文件中,不属于有效长度的数据,重新执行本次压缩;
[0148] 若物理长度等于当前记录的有效长度,则确定压缩文件正常,并执行下一次压缩。
[0149] 可选的,确定待压缩文件的完成结果,重启模块1105还用于:
[0150] 读取压缩文件中当前记录的状态标识,其中,状态标识表征:待压缩文件的压缩状态;
[0151] 若当前记录的状态标识为目标标识,则确定待压缩文件压缩的完成结果为未完成;
[0152] 若当前记录的状态标识不为目标标识,则确定待压缩文件压缩的完成结果为完成。
[0153] 可选的,从起始位置,按照预设的压缩步长,将待压缩文件中对应的待压缩数据段,压缩后写入压缩文件中时,压缩模块1102还用于:
[0154] 从起始位置,按照预设的压缩步长,读取待压缩文件中对应的待压缩数据段;
[0155] 压缩待压缩数据段,获得相应的压缩产物;
[0156] 将压缩产物写入至压缩文件中。
[0157] 可选的,更新已压缩长度和压缩文件中当前记录的有效长度时,更新模块1103还用于:
[0158] 若压缩产物写入成功,则基于待压缩数据段对应的第一字节长度,更新当前记录的已压缩长度,并基于压缩产物对应的第二字节长度,更新当前记录的有效长度。
[0159] 若压缩产物写入失败,则不更新当前记录的已压缩长度和有效长度。
[0160] 可选的,更新已压缩长度和压缩文件中当前记录的有效长度之后,所述装置还包括删除模块1106,删除模块1106用于:
[0161] 当最后一段待压缩数据段压缩并写入压缩文件之后,删除压缩文件中的新增头部数据,获得目标文件。
[0162] 基于上述实施例,参阅图12所示为本申请实施例中电子设备的结构示意图。
[0163] 本申请实施例提供了一种电子设备,该电子设备可以包括处理器1210(Center Processing Unit,CPU)、存储器1220、输入设备1230和输出设备1240等,输入设备1230可以包括键盘鼠标触摸屏等,输出设备1240可以包括显示设备,如液晶显示器(Liquid Crystal Display,LCD)、阴极射线管(Cathode Ray Tube,CRT)等。
[0164] 存储器1220可以包括只读存储器(ROM)和随机存取存储器(RAM),并向处理器1210提供存储器1220中存储的程序指令和数据。在本申请实施例中,存储器1220可以用于存储本申请实施例中任一种文件压缩方法的程序。
[0165] 处理器1210通过调用存储器1220存储的程序指令,处理器1210用于按照获得的程序指令执行本申请实施例中任一种文件压缩方法。
[0166] 基于上述实施例,本申请实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述任意方法实施例中的文件压缩方法。
[0167] 本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD‑ROM、光学存储器等)上实施的计算机程序产品的形式。
[0168] 本申请是参照根据本申请的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
[0169] 这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
[0170] 这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
[0171] 显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。
QQ群二维码
意见反馈