CN103309621B - 读取分段压缩包中数据的方法 - Google Patents

读取分段压缩包中数据的方法 Download PDF

Info

Publication number
CN103309621B
CN103309621B CN201210536880.5A CN201210536880A CN103309621B CN 103309621 B CN103309621 B CN 103309621B CN 201210536880 A CN201210536880 A CN 201210536880A CN 103309621 B CN103309621 B CN 103309621B
Authority
CN
China
Prior art keywords
interviewed
file
compression
section
data
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
Application number
CN201210536880.5A
Other languages
English (en)
Other versions
CN103309621A (zh
Inventor
陈飞舟
吴才忠
刘畅
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Chengdu Xishanju Interactive Entertainment Technology Co Ltd
Zhuhai Kingsoft Digital Network Technology Co Ltd
Original Assignee
Zhuhai Kingsoft Online Game Technology Co Ltd
Chengdu Xishanju Interactive Entertainment Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Zhuhai Kingsoft Online Game Technology Co Ltd, Chengdu Xishanju Interactive Entertainment Technology Co Ltd filed Critical Zhuhai Kingsoft Online Game Technology Co Ltd
Priority to CN201210536880.5A priority Critical patent/CN103309621B/zh
Publication of CN103309621A publication Critical patent/CN103309621A/zh
Application granted granted Critical
Publication of CN103309621B publication Critical patent/CN103309621B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Information Transfer Between Computers (AREA)

Abstract

本发明涉及一种读取分段压缩包中数据的方法,在所述分段压缩包中,所有文件以分段方式压缩;读取过程先后包括加载步骤和读取步骤;加载步骤中,接收上层应用传入受访文件的标识信息,并为受访文件分配虚拟地址空间;读取步骤中,接收上层应用传入受访文件的标识信息与受访区间信息,之后解压与受访区间对应的压缩段,并将解压后的数据经由虚拟地址空间返回给上层应用。通过本发明的方法,在加载过程无需要为受访一次性分配足量的物理内存,也无需将其完全解压到物理内存中,读取过程只针对被访问的压缩段进行解压;因此,本发明在读取分段压缩包中数据的过程中减少了解压文件的时间及降低了物理内存的占用,从而提供了读取数据的速度。

Description

读取分段压缩包中数据的方法
【技术领域】
本发明涉及一种读取分段压缩包中数据的方法。
【背景技术】
现有软件客户端资源通常采用打包方式存储,从而获得传输方便、资源保密、以及更加快速访问速度等优点。同时,现今应用程序常使用内存映射文件(FileMapping)方式,将磁盘数据文件映射到内存中,并通过直接访问内存来实现对文件的读取操作。这样能有效减少内存占用率和I/O操作,达到提升文件读取速度的目的。
但对于包内文件,若是采用单个文件整体压缩的方式则需要需一次性分配足够的内存用于存放解压后的数据。随后还需要将其完全解压,才能读取到解压后的数据内容。这是由于对于压缩过后文件,由于其压缩内容前后相互依赖、压缩前后数据差异较大等原因造成的。
由上述描述可知,对于有稀疏访问需求的包内压缩文件,若希望通过内存映射文件的方式将其读取,则只是读取其中的少量内容,也要进行对文件全部内容进行解压;这在读取时间和内存空间上都存在相当大的浪费。
【发明内容】
本发明的目的是提供一种读取分段压缩包中数据的方法,其解决了读取数据过程中存在的读取时间过长和内存空间占用过多的问题。
上述技术问题通过以下技术方案实现:
一种读取分段压缩包中数据的方法,在所述分段压缩包中,所有文件以分段方式压缩;其特征在于,读取过程先后包括加载步骤和读取步骤;
加载步骤中,接收上层应用传入受访文件的标识信息,并为受访文件分配虚拟地址空间;
读取步骤中,接收上层应用传入受访文件的标识信息与受访区间信息,之后解压与受访区间对应的压缩段,并将解压后的数据经由虚拟地址空间返回给上层应用。
由上述方案,通过本发明的方法,在加载过程无需要为受访一次性分配足量的物理内存,也无需将其完全解压到物理内存中,读取过程只针对被访问的压缩段进行解压;因此,本发明在读取分段压缩包中数据的过程中减少了解压文件的时间及降低了物理内存的占用,从而提供了读取数据的速度。
进一步的方案是:在所述分段压缩包中,每个文件被分成若干个数据段分别进行压缩,每个数据段压缩后称之为一个压缩段,分段压缩包内存储了每个文件的所有压缩段。
进一步的方案是:在所述分段压缩包中存有一份分段压缩映射表,分段压缩映射表记录着每个数据段在文件的位置信息、每个压缩段在分段压缩包内的位置信息、数据段与压缩段的位置对应关系;所述的位置信息包括偏移值和大小。
进一步的方案是:所述的加载过程,会先从分段压缩包中获取受访文件的每个数据段的位置信息(由此可以得知受访文件解压后的大小),并为此文件分配虚拟地址空间,虚拟地址空间连续,且其大小等于或大于受访文件解压后的大小,在该虚拟地址空间中,文件的每个段数据都有一一对应并大小相等的部分虚拟地址空间。
所述读取步骤具体包括:
(301)接收上层应用根据所需的数据传入受访文件的标识信息及受访区间的信息,先查询与受访区间对应的虚拟地空间是否已经分配了物理内存,若是则直接跳转至步骤(305);
(302)由受访文件的受访区间的信息,在分段压缩映射表中进行查询,确定出与所需数据段对应的压缩段,以及这些压缩段在分段压缩包内的位置;
(303)为上一步骤中查找得到的压缩段分配相应的物理内存,每一个压缩段对应的物理内存称之为段空间,物理内存中所需分配的段空间的大小大于或等于其对应的压缩段经解压后的大小;
(304)将每一个查询得到的压缩段解压到相应的段空间中;然后,将物理内存中的上述段空间与所述与受访区间对应的虚拟地空间建立起映射关系,因此,对虚拟地址空间的读写操作将反映到物理内存上;
(305)将虚拟地址空间中指向受访数据的指针返回给上层应用。
【附图说明】
图1为本发明中读取步骤的流程图。
【具体实施方式】
一种读取分段压缩包中数据的方法,在所述分段压缩包中,在所述分段压缩包中,所有文件以分段方式压缩;在所述分段压缩包中存有一份分段压缩映射表,分段压缩映射表记录着每个数据段在文件的位置信息、每个压缩段在分段压缩包内的位置信息、数据段与压缩段的对应关系,位置信息包括偏移值和大小,因此,分段压缩映射表也反映出每个文件的未经压缩的大小、压缩后的大小、每个数据段的大小和每个压缩段的大小;
所述方法先后包括加载步骤和读取步骤;
加载步骤具体包括:
(201)调用文件打开函数打开分段压缩包;
(202)接收上层应用传入受访文件的文件标识(例如,文件名称),先从分段压缩包中获取受访文件的每个数据段的位置信息,由此可以得知受访文件解压后的大小,然后为受访文件分配一个连续的虚拟地址空间,此虚拟地址空间的起始地址记为pBase,分配空间的大小等于或大于受访文件解压后的大小;在该虚拟地址空间中,文件的每个段数据都有一一对应并大小相等的部分虚拟地址空间;
如图1所示,读取步骤:
(301)接收上层应用根据所需要的数据传入受访文件的标识信息及受访区间的信息(在实际应用中,具体为:受访文件的文件标识(例如,文件名称)、偏移值offset、长度length);先调用API函数查询虚拟地址空间中的与受访区间对应的虚拟地址空间(即虚拟地址空间中的[pBase+offset,pBase+offset+length])是否已经分配了物理内存;若是则直接跳转至步骤(305);
(302)在分段压缩映射表中进行查询,确定出与所需数据段对应的压缩段,以及这些压缩段在分段压缩包内的位置;具体是,由文件标识确定受访文件,再由偏移值offset和长度length确定出所需要的数据在受访文件的具体位置,由于分段压缩映射表记录着每个数据段在文件的位置信息,然后可以在分段压缩映射表中查询到出对应的数据段,根据数据段与压缩段的对应关系,确定出与所需数据对应的压缩段,并从分段压缩映射表中查询出这些压缩段在分段压缩包内的位置;
(303)为上一步骤中查找得到的压缩段分配相应的物理内存,每一个压缩段对应的物理内存称之为段空间,物理内存中所需分配的段空间的大小大于或等于其对应的压缩段经解压后的大小;
(304)将每一个查询得到的压缩段解压到相应的段空间中;然后,调用API函数将物理内存中的上述段空间与所述与受访区间对应的虚拟地空间建立起映射关系,因此,对虚拟地址空间的读写操作将反映到物理内存上,在受访文件的访问过程中,始终保持着已建立的映射关系;
(305)将虚拟地址空间中指向受访数据的指针返回给上层应用。
上层应用获取该指针后,可以在访问文件的同一个访问周期内多次使用数据指针来获取所需的数据;当接收到上层应用发送回的指针,然后根据指针找到虚拟地址空间的相应位置,再根据虚拟地址空间与内存的映射关系从内存中找出所需的数据;即,上层应用对虚拟地址空间的所有读取操作都将在对应的物理内存中完成。
在访问受访文件过程中,受访文件中没有被访问到的数据段,是不需要从压缩包将对应的压缩段进行解压和分配内存,可见,在对访问压缩包的过程中,提高了读取速度和减少占用内存空间。
使用了虚拟地址空间,可以在访问受访文件过程中,始终记录着虚拟地址空间中已存在对应关系的物理内存的区间,避免了虚拟地址空间的区间被重复建立对应关系的物理内存。
当上层应用访问受访文件结束后,则将虚拟地址空间对应的句柄或引用销毁,并回收所使用的地址空间和物理内存。
下面以一具体应用来描述上述方法的运用:
例如,一游戏应用程序需要经常运用两个文件A、B,文件A、B的大小分别为13MB和16MB;文件A、B被压缩在一分段压缩包C中,在分段压缩包C中,文件A依序被分成三个数据段(前两个数据段的大小为5MB,第三个数据段的大小为3MB)进行压缩,分别得到第一A压缩段、第二A压缩段和第三A压缩段,这三个压缩段的大小分别为3MB、2MB、1MB;文件B依序被分成个数据段(前三个数据段的大小为5MB,第四数据段的大小为1MB)进行压缩,分别得到第一B压缩段、第二B压缩段、第三B压缩段和第四B压缩段,这四个压缩段的大小分别为2MB、2.2MB、3MB、0.4MB;同时,分段压缩包C存有一分段映射表,该分段压缩映射表记录着每个数据段在文件的位置信息、压缩段在分段压缩包内的位置信息及数据段与压缩段的对应关系,位置信息包括偏移值和大小,因此,分段压缩映射表也反映出每个文件的未经压缩的大小、压缩后的大小、每个数据段的大小和每个压缩段的大小。
读取上述分段压缩包的方法,先后包括加载步骤和读取步骤;
加载步骤具体包括:
(201)调用文件打开函数打开分段压缩包C;
(202)接收上层应用传入文件A的文件标识(例如,文件名称),为文件A分配一个连续的虚拟地址空间,此虚拟地址空间的起始地址记为pBase,分配空间的大小为该文件A未经压缩的大小;
读取步骤具体包括:
(301)接收上层应用根据所需要的数据传入文件A的信息,具体为:受访文件的文件标识(例如,文件名称)、偏移值offset、长度length,假设偏移值为4MB,长度为4MB;先调用API函数查询虚拟地址空间中的与受访区间对应的虚拟地址空间(即虚拟地址空间中的[pBase+offset,pBase+offset+length])是否分配了物理内存;若是则直接跳转至步骤(304);
(302)由文件A的受访区间的信息,在分段压缩映射表中进行查询来确定与所需数据对应的压缩段,以及这些压缩段在分段压缩包内的位置;具体是:由偏移值offset和长度length确定出所需要的数据在受访文件的具体位置:文件A的第4MB至第8MB;因此,可以确定出要找的数据在文件A的第一个段数和第二个数据段,从而确定出要找的数据在分段压缩包中的第一A压缩段和第二A压缩段,并从分段压缩映射表中查询出第一A压缩段和第二A压缩段在分段压缩包内的位置;
(303)在物理内存中分配与第一A压缩段、第二A压缩段分别对应的第一段空间和第二段空间,第一段空间和第二段空间的大小分别为5MB、5MB;
(304)将第一A压缩段和第二A压缩段一一对应地解压到两个段空间中;后,调用操作系统的API函数将物理内存中的第一A压缩段、第二A压缩段分别与即虚拟地址空间中的[pBase,pBase+5M]、[pBase+5M,pBase+10M]建立起映射关系,即虚拟地址空间中的[pBase,pBase+5M]及[pBase+5M,pBase+10M]已经分配了物理内存;
(305)虚拟地址空间中指向受访数据的指针(即该指针指向虚拟地址空间中的[pBase+offset,pBase+offset+length])返回给上层应用。
本发明不局限于上述实施例,基于上述实施例的、未做出创造性劳动的简单替换,应当属于本发明揭露的范围。

Claims (4)

1.一种读取分段压缩包中数据的方法,在所述分段压缩包中,所有文件以分段方式压缩;其特征在于,读取过程先后包括加载步骤和读取步骤;
加载步骤中,接收上层应用传入受访文件的标识信息,并为受访文件分配虚拟地址空间;
读取步骤中,接收上层应用传入受访文件的标识信息与受访区间信息,之后解压与受访区间对应的压缩段,并将解压后的数据经由虚拟地址空间返回给上层应用;
其中,所述读取步骤具体包括:
(301)接收上层应用根据所需的数据传入受访文件的标识信息及受访文件的受访区间的信息,先查询与受访区间对应的虚拟地址空间是否已经分配了物理内存,若是则直接跳转至步骤(305);
(302)由受访文件的受访区间的信息,在分段压缩映射表中进行查询,确定出与所需数据段对应的压缩段,以及这些压缩段在分段压缩包内的位置;
(303)为上一步骤中查找得到的压缩段分配相应的物理内存,每一个压缩段对应的物理内存称之为段空间;物理内存中所需分配的段空间的大小大于或等于其对应的压缩段经解压后的大小;
(304)将每一个查询得到的压缩段解压到相应的段空间中;然后,将物理内存中的上述段空间与所述与受访区间对应的虚拟地址空间建立起映射关系;
(305)将虚拟地址空间中指向受访数据的指针返回给上层应用。
2.根据权利要求1所述的方法,其特征在于,在所述分段压缩包中,每个文件被分成若干个数据段分别进行压缩,每个数据段压缩后称之为一个压缩段,分段压缩包内存储了每个文件的所有压缩段。
3.根据权利要求1所述的方法,其特征在于,在所述分段压缩包中存有一份分段压缩映射表,分段压缩映射表记录着每个数据段在文件的位置信息、每个压缩段在分段压缩包内的位置信息、数据段与压缩段的对应关系;所述位置信息包括偏移值和大小。
4.根据权利要求1所述的方法,其特征在于,所述的加载过程,会先从分段压缩包中获取受访文件的每个数据段的位置信息,并为此文件分配虚拟地址空间,虚拟地址空间连续,且其大小等于或大于受访文件解压后的大小。
CN201210536880.5A 2012-12-12 2012-12-12 读取分段压缩包中数据的方法 Active CN103309621B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201210536880.5A CN103309621B (zh) 2012-12-12 2012-12-12 读取分段压缩包中数据的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201210536880.5A CN103309621B (zh) 2012-12-12 2012-12-12 读取分段压缩包中数据的方法

Publications (2)

Publication Number Publication Date
CN103309621A CN103309621A (zh) 2013-09-18
CN103309621B true CN103309621B (zh) 2016-03-16

Family

ID=49134895

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201210536880.5A Active CN103309621B (zh) 2012-12-12 2012-12-12 读取分段压缩包中数据的方法

Country Status (1)

Country Link
CN (1) CN103309621B (zh)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
TWI650644B (zh) * 2018-01-05 2019-02-11 慧榮科技股份有限公司 管理快閃記憶體模組的方法及相關的快閃記憶體控制器及電子裝置
CN111602111A (zh) * 2018-04-03 2020-08-28 深圳市柔宇科技有限公司 一种数据处理方法及装置
CN110888851B (zh) * 2018-08-15 2023-06-20 阿里巴巴集团控股有限公司 压缩文件创建和解压的方法及装置、以及电子和存储设备
CN109710185B (zh) * 2018-12-19 2021-12-21 麒麟合盛网络技术股份有限公司 数据处理方法及装置
CN111061693B (zh) * 2019-12-19 2024-02-27 深圳市迅雷网络技术有限公司 一种下载时解压分卷压缩文件的方法、装置及介质
CN115471971B (zh) * 2021-06-10 2024-05-07 中国石油化工股份有限公司 盆地模拟阶段数据处理方法、装置及计算机可读存储介质

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6728775B1 (en) * 1997-03-17 2004-04-27 Microsoft Corporation Multiple multicasting of multimedia streams
CN101346883A (zh) * 2005-10-26 2009-01-14 斯多维兹有限公司 用于块模式访问存储的数据压缩的方法和系统
KR20080046345A (ko) * 2006-11-22 2008-05-27 삼성전자주식회사 휴대용 단말기의 메모리 절약 장치 및 방법

Also Published As

Publication number Publication date
CN103309621A (zh) 2013-09-18

Similar Documents

Publication Publication Date Title
CN103309621B (zh) 读取分段压缩包中数据的方法
CN102662690B (zh) 应用程序启动方法和装置
CN101315628B (zh) 内存数据库系统及实现内存数据库的方法和装置
CN102609360B (zh) 一种数据处理方法、装置及系统
US9298384B2 (en) Method and device for storing data in a flash memory using address mapping for supporting various block sizes
CN103177027B (zh) 获取动态Feed索引的方法和系统
CN104462141B (zh) 一种数据存储与查询的方法、系统及存储引擎装置
WO2020041928A1 (zh) 数据存储方法、系统及终端设备
CN100426259C (zh) 一种存储器文件数据虚拟存取方法
CN105027122A (zh) 压缩和重复数据删除分层驱动
CN101571869B (zh) 一种智能卡的文件存储、读取方法及装置
CN101777061B (zh) 一种java卡对象管理方法及java卡
CN107430602A (zh) 重复数据删除方法及存储设备
CN103559027A (zh) 一种key与value分开存储的key-value存储系统设计方法
CN104281528A (zh) 一种数据存储方法及装置
CN102609361A (zh) 虚拟机存储数据迁移方法和装置
CN108021513A (zh) 一种数据存储方法及装置
CN103902467A (zh) 压缩内存访问控制方法、装置及系统
CN103345469A (zh) 号码集合的存储、查询方法及其装置
CN110427347A (zh) 重复数据删除的方法、装置、存储节点及存储介质
CN103136215A (zh) 存储系统的数据读写方法和装置
CN103617123A (zh) 一种通过内存块实现内存管理的方法及系统
CN102479549A (zh) 半导体存储装置
WO2020192710A1 (zh) 基于lsm数据库的垃圾处理的方法、固态硬盘以及存储装置
CN107729406A (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
CP03 Change of name, title or address

Address after: 519000 Room 102, 202, 302 and 402, No. 325, Qiandao Ring Road, Tangjiawan Town, high tech Zone, Zhuhai City, Guangdong Province, Room 102 and 202, No. 327 and Room 302, No. 329

Patentee after: Zhuhai Jinshan Digital Network Technology Co.,Ltd.

Patentee after: CHENGDU XISHANJU INTERACTIVE ENTERTAINMENT TECHNOLOGY Co.,Ltd.

Address before: No. 8 Lianshan Lane, Jingshan Road, Zhuhai City, Guangdong Province, 519015

Patentee before: ZHUHAI KINGSOFT ONLINE GAME TECHNOLOGY Co.,Ltd.

Patentee before: CHENGDU XISHANJU INTERACTIVE ENTERTAINMENT TECHNOLOGY Co.,Ltd.

CP03 Change of name, title or address