EXtremeZip 2021.5.6 → 2021.5.27

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6d8b532725ca8997ac89e9e2474d6470519599990f46df267f3d8ee4b947475c
4
- data.tar.gz: 64396057023279e0c32aed5939b4426f993bb22a541ddba869f74eac11390852
3
+ metadata.gz: 52e17a94d2ce9cbb92c01bbd8e2ff1b14150e06e6de9842a7024475912d3c277
4
+ data.tar.gz: 2c72a81b8427e5934ced3f8df01f546fbd16c5b9a58a1e6ec978f9c8ce07bb48
5
5
  SHA512:
6
- metadata.gz: 2338e30f71b1fb13f66100134196e10bb36ae1469b81b17c6103bf7cadfbc654af57862eb6340c49a6686df96cfde3b75d961c6791a8be3843a697622f49daba
7
- data.tar.gz: 6962e359806dd2e1471a1bafcf5d0f6753ff0d3938950028ffbc29886c8c725cf298c6e68506f0602e935cd445ea26d5774eed5c4f849099285caa5721385ddb
6
+ metadata.gz: e894e9a30f9fa14a915b651e9d718ca7b9e09d107843f47611d7d63c177dd42e2733ff6d36620a4685c46105bce67559c37e4d62ca1b65fd47dde8dd72922699
7
+ data.tar.gz: 8e121b6e3f56e5c5933a40eb90922282508006bcf144d10bc0517ed59a10154e15c162bc5ca7766627de4c31a89d0ad24532af95c1e1e7426a05ea4713ee007e
@@ -97,60 +97,61 @@ end # extractVfsDataWithVersion(wholeCbor, fileVersion) #根据版本号
97
97
  class ExtremeUnZip
98
98
  #解压
99
99
  def exuz(rootPath)
100
+ wholeFileContent=File.read(rootPath) #最终文件内容
100
101
 
101
-
102
- wholeFileContent=File.read(rootPath) #最终文件内容
103
-
104
- # puts wholeFileContent #Debug.
105
102
  checkMemoryUsage(60)
106
-
107
- puts wholeFileContent.class #debug
108
-
109
- wholeCborByteArray=wholeFileContent[4..-1] #从第5个到末尾
103
+
104
+ puts wholeFileContent.class #debug
105
+
106
+ wholeCborByteArray=wholeFileContent[4..-1] #从第5个到末尾
110
107
  checkMemoryUsage(65)
111
-
112
-
113
- # puts wholeCborByteArray #Debug.
114
-
115
- checkMemoryUsage(70)
116
- wholeCbor=CBOR.decode(wholeCborByteArray) #解码
117
- # wholeCbor=wholeCborByteArray.from_cbor #解码CBOR
118
-
119
- # puts wholeCbor #Debug.
120
- checkMemoryUsage(75)
121
-
122
- fileVersion=wholeCbor['version'] #获取版本号
123
-
124
- puts 'fileVersion:' #Debug
125
- checkMemoryUsage(80)
126
- puts fileVersion #Debug.
127
-
128
-
129
- if (fileVersion<14) #版本号过小
130
- checkMemoryUsage(85)
131
- puts 'file version too old' #报告错误
132
- else #版本号够大
133
- compressedVfsMenu=wholeCbor['vfsMenu'] #获取压缩后的目录内容
134
108
 
135
- checkMemoryUsage(90)
136
- replyByteArray=LZMA.decompress(compressedVfsMenu) #解码目录VFS字节数组内容
137
109
 
138
- # puts replyByteArray #Debug
139
-
140
- checkMemoryUsage(95)
141
- # victoriaFreshData=extractVfsDataWithVersion(wholeCbor, fileVersion) #根据版本号,提取VFS数据内容
142
- victoriaFreshDataFile=extractVfsDataWithVersionExternalFile(wholeCbor, fileVersion) #根据版本号,提取VFS数据内容
110
+ # puts wholeCborByteArray #Debug.
143
111
 
144
- # puts victoriaFreshData #Debug
112
+ checkMemoryUsage(70)
113
+ wholeCbor=CBOR.decode(wholeCborByteArray) #解码
114
+ # wholeCbor=wholeCborByteArray.from_cbor #解码CBOR
145
115
 
146
- checkMemoryUsage(100)
147
- $clipDownloader=VictoriaFresh.new #创建下载器。
116
+ # puts wholeCbor #Debug.
117
+ checkMemoryUsage(75)
148
118
 
119
+ fileVersion=wholeCbor['version'] #获取版本号
120
+
121
+ puts 'fileVersion:' #Debug
122
+ checkMemoryUsage(80)
123
+ puts fileVersion #Debug.
124
+
125
+
126
+ if (fileVersion<14) #版本号过小
127
+ checkMemoryUsage(85)
128
+ puts 'file version too old' #报告错误
129
+ else #版本号够大
130
+ compressedVfsMenu=wholeCbor['vfsMenu'] #获取压缩后的目录内容
131
+
132
+ checkMemoryUsage(90)
133
+ replyByteArray=LZMA.decompress(compressedVfsMenu) #解码目录VFS字节数组内容
134
+
135
+ # puts replyByteArray #Debug
136
+
137
+ checkMemoryUsage(95)
138
+ # victoriaFreshData=extractVfsDataWithVersion(wholeCbor, fileVersion) #根据版本号,提取VFS数据内容
139
+ victoriaFreshDataFile=extractVfsDataWithVersionExternalFile(wholeCbor, fileVersion) #根据版本号,提取VFS数据内容
140
+
141
+ # puts victoriaFreshData #Debug
142
+
143
+ checkMemoryUsage(100)
144
+ $clipDownloader=VictoriaFresh.new #创建下载器。
145
+
146
+
147
+ $clipDownloader.releaseFilesExternalDataFile(replyByteArray, victoriaFreshDataFile) #释放各个文件
148
+
149
+ fileToRemove=File.new(victoriaFreshDataFile) #要删除的文件
150
+
151
+ File.delete(fileToRemove) #删除文件
152
+
153
+ end #if (fileVersion<14) #版本号过小
149
154
 
150
- $clipDownloader.releaseFilesExternalDataFile(replyByteArray, victoriaFreshDataFile) #释放各个文件
151
- checkMemoryUsage(105)
152
- end #if (fileVersion<14) #版本号过小
153
-
154
155
  end #def exuz(rootPath)
155
156
  end #class ExtremeUnZip
156
157
 
@@ -0,0 +1,191 @@
1
+ #!/usr/bin/ruby
2
+
3
+ require 'victoriafresh'
4
+ require 'cbor'
5
+ require 'lzma'
6
+ require 'etc' #cpu amount
7
+ require 'cod'
8
+ require 'uuid'
9
+ require 'get_process_mem'
10
+
11
+ def checkMemoryUsage(lineNumber)
12
+ mem= GetProcessMem.new
13
+
14
+ puts("#{lineNumber} , Memory: #{mem.mb}"); #Debug
15
+
16
+ end #def checkMemoryUsage
17
+
18
+
19
+ class ExtremeZip
20
+ #压缩
21
+ def exz(rootPath)
22
+ #计算一个合理的数据块长度:
23
+ # dataBlockLength=16777216 #数据块单元长度, 16MiB
24
+ dataBlockLength=33554432 #数据块单元长度, 32MiB
25
+ # dataBlockLength=67108864 #数据块单元长度, 64MiB
26
+
27
+ checkMemoryUsage(75)
28
+
29
+ # dynamicBlockLength=victoriaFreshData.bytesize / Etc.nprocessors + 1 #尝试根据现在的任务计算出一个动态块长度。
30
+ dynamicBlockLength=dataBlockLength #尝试根据现在的任务计算出一个动态块长度。
31
+
32
+
33
+ checkMemoryUsage(80)
34
+
35
+ maxAcceptableDataBlockLength=52852*1024 #Max acceptable data block length
36
+
37
+ dataBlockLength=[dataBlockLength, dynamicBlockLength].max #取预定义的块长度和动态块长度中较大的那个来作为块长度。这样压缩比高一些
38
+ checkMemoryUsage(85)
39
+
40
+ dataBlockLength=[dataBlockLength, maxAcceptableDataBlockLength].min #Limit data block length, not to exceed max acceptable data block length.
41
+
42
+ puts("block length: #{dataBlockLength}") #Debug
43
+
44
+
45
+ $clipDownloader=VictoriaFresh.new #创建下载器。
46
+
47
+ $clipDownloader.diskFlush=true #向磁盘写入缓存
48
+ $clipDownloader.diskMultiFile=true #写多个磁盘文件
49
+ $clipDownloader.diskFileName='victoriafreshdata.v.' #磁盘文件名前缀
50
+ $clipDownloader.diskFlushSize=dataBlockLength #磁盘文件大小
51
+
52
+
53
+ checkMemoryUsage(25)
54
+ victoriaFresh,victoriaFreshData=$clipDownloader.checkOnce(rootPath) #打包该目录树。
55
+
56
+ #利用protobuf打包成字节数组:
57
+ replyByteArray="" #回复时使用的字节数组。
58
+ checkMemoryUsage(30)
59
+ replyByteArray=victoriaFresh.to_cbor ##打包成字节数组。
60
+
61
+ checkMemoryUsage(35)
62
+ victoriaFreshFile=File.new("victoriafresh.v","wb") #创建文件。
63
+ victoriaFreshFile.syswrite(replyByteArray) #写入文件。
64
+
65
+ victoriaFreshFile.close #关闭文件。
66
+ checkMemoryUsage(40)
67
+
68
+ # victoriaFreshDataFile=File.new("victoriafreshdata.v","wb") #数据文件。
69
+ # victoriaFreshDataFile.syswrite(victoriaFreshData) #写入文件。
70
+ # victoriaFreshDataFile.close #关闭文件。
71
+ checkMemoryUsage(45)
72
+
73
+
74
+ wholeFileContent='' #最终文件内容
75
+
76
+ checkMemoryUsage(50)
77
+ wholeFileContent = wholeFileContent + 'exz' + "\0" #写入魔法文件头
78
+
79
+ wholeCbor={} #整个CBOR结构
80
+ wholeCbor['version']=68 #文件格式版本号
81
+ checkMemoryUsage(55)
82
+
83
+ uuid = UUID.new #获取生成器
84
+ generatedUuid=uuid.generate #生成唯一标识
85
+ wholeCbor['uuid']=generatedUuid #指定本个压缩包的唯一编号
86
+ checkMemoryUsage(60)
87
+
88
+ #压缩目录数据并放入CBOR:
89
+ compressedVfsMenu = LZMA.compress(replyByteArray) #压缩目录数据
90
+
91
+ checkMemoryUsage(65)
92
+ puts("compressed menu length: #{compressedVfsMenu.bytesize}") #Debug.
93
+ wholeCbor['vfsMenu']=compressedVfsMenu #加入目录
94
+
95
+ #压缩文件实体数据并放入CBOR:
96
+ checkMemoryUsage(70)
97
+
98
+ checkMemoryUsage(90)
99
+
100
+
101
+ processDataLength=0 #已处理的数据长度
102
+
103
+ checkMemoryUsage(95)
104
+ vfsDataList=[] #数据块压缩块列表
105
+ taskPipeList=[] #任务分配管道列表。
106
+ responsePipeList=[] #任务回复管道列表
107
+ processIdList = [] #记录到子进程列表中
108
+ checkMemoryUsage(100)
109
+
110
+ filePartAmount=$clipDownloader.currentDiskFlushSuffix #获取文件个数
111
+
112
+ filePartCounter=0 #文件计数器
113
+
114
+ while (filePartCounter < filePartAmount) #未处理完毕
115
+ currentBlockFile=File.new($clipDownloader.diskFileName+filePartCounter.to_s, 'rb') #打开文件
116
+
117
+ currentBlockData=currentBlockFile.read #读取全部内容
118
+
119
+ currentBlockFile.close #关闭文件
120
+
121
+ File.delete(currentBlockFile) #删除数据块文件
122
+
123
+ currentTaskPipe=Cod.pipe #任务分配管道
124
+ currentResponsePipe=Cod.pipe #任务回复管道
125
+
126
+ #记录管道:
127
+ taskPipeList << currentTaskPipe
128
+ responsePipeList << currentResponsePipe
129
+ p1 = fork do #复制出子进程
130
+ checkMemoryUsage(115)
131
+ currentBlockDataToCompress=currentBlockData #读取数据块
132
+
133
+ currentCompressedVfsData=LZMA.compress(currentBlockDataToCompress) #压缩当前块
134
+
135
+ checkMemoryUsage(120)
136
+ puts("compressed data length: #{currentCompressedVfsData.bytesize}") #Debug.
137
+
138
+ currentResponsePipe.put currentCompressedVfsData #将压缩后的数据块写入到回复管道中
139
+
140
+ checkMemoryUsage(125)
141
+ puts("finished #{Process.pid}") #Debug
142
+ end #p1 = fork do #复制出子进程
143
+
144
+ processDataLength=processDataLength + dataBlockLength #计数
145
+ checkMemoryUsage(130)
146
+
147
+ processIdList << p1 #记录到子进程列表中
148
+
149
+ filePartCounter=filePartCounter+1 #计数
150
+ end #while processDataLength < victoriaFreshData.byte_size do #未处理完毕
151
+
152
+ checkMemoryUsage(135)
153
+ processCounter=0 #子进程计数器
154
+
155
+ processIdList.each do |currentSubProcess|
156
+ puts("waiting #{currentSubProcess}") #Debug
157
+ checkMemoryUsage(140)
158
+
159
+ currentResponsePipe=responsePipeList[processCounter] #任务回复管道
160
+
161
+ currentCompressedVfsDataFromSubProcess=currentResponsePipe.get #读取压缩后数据
162
+ checkMemoryUsage(145)
163
+
164
+ Process.waitpid(currentSubProcess) #等待该个子进程
165
+
166
+ vfsDataList << currentCompressedVfsDataFromSubProcess #加入数据块列表中
167
+ checkMemoryUsage(150)
168
+
169
+ processCounter=processCounter+1 #子进程计数
170
+ end #processIdList.each do |currentSubProcess|
171
+
172
+ checkMemoryUsage(155)
173
+ wholeCbor['vfsDataList']=vfsDataList #加入数据
174
+
175
+ #序列化CBOR:
176
+ wholeCborByteArray=wholeCbor.to_cbor
177
+ checkMemoryUsage(160)
178
+
179
+ wholeFileContent = wholeFileContent + wholeCborByteArray
180
+
181
+ #写入文件:
182
+ checkMemoryUsage(165)
183
+ extremeZipOutputFile=File.new( victoriaFresh['name'] + '.exz', 'wb') #创建文件
184
+ extremeZipOutputFile.syswrite(wholeFileContent) #写入文件
185
+ extremeZipOutputFile.close #关闭文件
186
+
187
+
188
+
189
+ end #def exz(rootPath)
190
+ end #class ExtremeZip
191
+
metadata CHANGED
@@ -1,35 +1,35 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: EXtremeZip
3
3
  version: !ruby/object:Gem::Version
4
- version: 2021.5.6
4
+ version: 2021.5.27
5
5
  platform: ruby
6
6
  authors:
7
7
  - Hxcan Cai
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-05-06 00:00:00.000000000 Z
11
+ date: 2021-05-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: VictoriaFreSh
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ">="
18
- - !ruby/object:Gem::Version
19
- version: 2021.5.6
20
17
  - - "~>"
21
18
  - !ruby/object:Gem::Version
22
- version: 2021.5.6
19
+ version: 2021.5.8
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 2021.5.8
23
23
  type: :runtime
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
26
26
  requirements:
27
- - - ">="
28
- - !ruby/object:Gem::Version
29
- version: 2021.5.6
30
27
  - - "~>"
31
28
  - !ruby/object:Gem::Version
32
- version: 2021.5.6
29
+ version: 2021.5.8
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 2021.5.8
33
33
  - !ruby/object:Gem::Dependency
34
34
  name: ruby-lzma
35
35
  requirement: !ruby/object:Gem::Requirement
@@ -44,6 +44,20 @@ dependencies:
44
44
  - - ">="
45
45
  - !ruby/object:Gem::Version
46
46
  version: 0.4.3
47
+ - !ruby/object:Gem::Dependency
48
+ name: get_process_mem
49
+ requirement: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ version: 0.2.7
54
+ type: :runtime
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - ">="
59
+ - !ruby/object:Gem::Version
60
+ version: 0.2.7
47
61
  description: Extreme zip.
48
62
  email: caihuosheng@gmail.com
49
63
  executables:
@@ -55,11 +69,12 @@ files:
55
69
  - bin/exuz
56
70
  - bin/exz
57
71
  - lib/extremeunzip.zzaqsu.rb
72
+ - lib/extremezip.zzaqsv.rb
58
73
  homepage: http://rubygems.org/gems/EXtremeZip
59
74
  licenses:
60
75
  - MIT
61
76
  metadata: {}
62
- post_install_message:
77
+ post_install_message:
63
78
  rdoc_options: []
64
79
  require_paths:
65
80
  - lib
@@ -74,8 +89,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
74
89
  - !ruby/object:Gem::Version
75
90
  version: '0'
76
91
  requirements: []
77
- rubygems_version: 3.0.3
78
- signing_key:
92
+ rubygems_version: 3.2.15
93
+ signing_key:
79
94
  specification_version: 4
80
95
  summary: EXtremeZip
81
96
  test_files: []