EXtremeZip 2021.5.6 → 2021.5.7

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.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/extremezip.zzaqsv.rb +198 -0
  3. metadata +3 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6d8b532725ca8997ac89e9e2474d6470519599990f46df267f3d8ee4b947475c
4
- data.tar.gz: 64396057023279e0c32aed5939b4426f993bb22a541ddba869f74eac11390852
3
+ metadata.gz: dff9bb4d48b74cbd2a68b0b4d4c272a3a8eb892583f06405a366ff21c8b1f74b
4
+ data.tar.gz: f237f9506bb0535a1691ff4db701030b9813c8983403675235efd64853c4308d
5
5
  SHA512:
6
- metadata.gz: 2338e30f71b1fb13f66100134196e10bb36ae1469b81b17c6103bf7cadfbc654af57862eb6340c49a6686df96cfde3b75d961c6791a8be3843a697622f49daba
7
- data.tar.gz: 6962e359806dd2e1471a1bafcf5d0f6753ff0d3938950028ffbc29886c8c725cf298c6e68506f0602e935cd445ea26d5774eed5c4f849099285caa5721385ddb
6
+ metadata.gz: 3c64977a4f41409dcd0eaa03d63676825e133bb8140d2abd5101ead37390f86ceaeda8450e204b3d7c166791cfa0d24746c47352d2f1330cb9bd426c2c39a51e
7
+ data.tar.gz: e7924853e2318f6d2aeec49b34480476b51210e0c94b85dd156ff3ba191bac209e239f5b9aec1de27e44f45749c1353fe8d559500f256b07301d213f4fd123b1
@@ -0,0 +1,198 @@
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
+ # victoriaFresh.encode(replyByteArray) #打包成字节数组。
60
+ # replyByteArray=Com::Stupidbeauty::Victoriafresh::FileMessage.encode(victoriaFresh) ##打包成字节数组。
61
+ replyByteArray=victoriaFresh.to_cbor ##打包成字节数组。
62
+
63
+ checkMemoryUsage(35)
64
+ victoriaFreshFile=File.new("victoriafresh.v","wb") #创建文件。
65
+ victoriaFreshFile.syswrite(replyByteArray) #写入文件。
66
+
67
+ victoriaFreshFile.close #关闭文件。
68
+ checkMemoryUsage(40)
69
+
70
+ # victoriaFreshDataFile=File.new("victoriafreshdata.v","wb") #数据文件。
71
+ # victoriaFreshDataFile.syswrite(victoriaFreshData) #写入文件。
72
+ # victoriaFreshDataFile.close #关闭文件。
73
+ checkMemoryUsage(45)
74
+
75
+
76
+ wholeFileContent='' #最终文件内容
77
+
78
+ checkMemoryUsage(50)
79
+ wholeFileContent = wholeFileContent + 'exz' + "\0" #写入魔法文件头
80
+
81
+ wholeCbor={} #整个CBOR结构
82
+ wholeCbor['version']=68 #文件格式版本号
83
+ checkMemoryUsage(55)
84
+
85
+ uuid = UUID.new #获取生成器
86
+ generatedUuid=uuid.generate #生成唯一标识
87
+ wholeCbor['uuid']=generatedUuid #指定本个压缩包的唯一编号
88
+ checkMemoryUsage(60)
89
+
90
+ #压缩目录数据并放入CBOR:
91
+ compressedVfsMenu = LZMA.compress(replyByteArray) #压缩目录数据
92
+
93
+ checkMemoryUsage(65)
94
+ puts("compressed menu length: #{compressedVfsMenu.bytesize}") #Debug.
95
+ wholeCbor['vfsMenu']=compressedVfsMenu #加入目录
96
+
97
+ #压缩文件实体数据并放入CBOR:
98
+ checkMemoryUsage(70)
99
+
100
+ checkMemoryUsage(90)
101
+
102
+
103
+ processDataLength=0 #已处理的数据长度
104
+
105
+ checkMemoryUsage(95)
106
+ vfsDataList=[] #数据块压缩块列表
107
+ taskPipeList=[] #任务分配管道列表。
108
+ responsePipeList=[] #任务回复管道列表
109
+ processIdList = [] #记录到子进程列表中
110
+ checkMemoryUsage(100)
111
+
112
+ filePartAmount=$clipDownloader.currentDiskFlushSuffix #获取文件个数
113
+
114
+ filePartCounter=0 #文件计数器
115
+
116
+ while (filePartCounter < filePartAmount) #未处理完毕
117
+
118
+ # while processDataLength < victoriaFreshData.bytesize do #未处理完毕
119
+ # currentBlockData=victoriaFreshData[processDataLength, dataBlockLength] #取出当前数据块
120
+
121
+ currentBlockFile=File.new($clipDownloader.diskFileName+filePartCounter.to_s, 'rb') #打开文件
122
+
123
+ currentBlockData=currentBlockFile.read #读取全部内容
124
+
125
+ currentBlockFile.close #关闭文件
126
+
127
+ checkMemoryUsage(105)
128
+ currentTaskPipe=Cod.pipe #任务分配管道
129
+ currentResponsePipe=Cod.pipe #任务回复管道
130
+
131
+ #记录管道:
132
+ checkMemoryUsage(110)
133
+ taskPipeList << currentTaskPipe
134
+ responsePipeList << currentResponsePipe
135
+
136
+ p1 = fork do #复制出子进程
137
+ checkMemoryUsage(115)
138
+ currentBlockDataToCompress=currentBlockData #读取数据块
139
+
140
+ currentCompressedVfsData=LZMA.compress(currentBlockDataToCompress) #压缩当前块
141
+
142
+ checkMemoryUsage(120)
143
+ puts("compressed data length: #{currentCompressedVfsData.bytesize}") #Debug.
144
+
145
+ currentResponsePipe.put currentCompressedVfsData #将压缩后的数据块写入到回复管道中
146
+
147
+ checkMemoryUsage(125)
148
+ puts("finished #{Process.pid}") #Debug
149
+ end #p1 = fork do #复制出子进程
150
+
151
+ processDataLength=processDataLength + dataBlockLength #计数
152
+ checkMemoryUsage(130)
153
+
154
+ processIdList << p1 #记录到子进程列表中
155
+
156
+ filePartCounter=filePartCounter+1 #计数
157
+ end #while processDataLength < victoriaFreshData.byte_size do #未处理完毕
158
+
159
+ checkMemoryUsage(135)
160
+ processCounter=0 #子进程计数器
161
+
162
+ processIdList.each do |currentSubProcess|
163
+ puts("waiting #{currentSubProcess}") #Debug
164
+ checkMemoryUsage(140)
165
+
166
+ currentResponsePipe=responsePipeList[processCounter] #任务回复管道
167
+
168
+ currentCompressedVfsDataFromSubProcess=currentResponsePipe.get #读取压缩后数据
169
+ checkMemoryUsage(145)
170
+
171
+ Process.waitpid(currentSubProcess) #等待该个子进程
172
+
173
+ vfsDataList << currentCompressedVfsDataFromSubProcess #加入数据块列表中
174
+ checkMemoryUsage(150)
175
+
176
+ processCounter=processCounter+1 #子进程计数
177
+ end #processIdList.each do |currentSubProcess|
178
+
179
+ checkMemoryUsage(155)
180
+ wholeCbor['vfsDataList']=vfsDataList #加入数据
181
+
182
+ #序列化CBOR:
183
+ wholeCborByteArray=wholeCbor.to_cbor
184
+ checkMemoryUsage(160)
185
+
186
+ wholeFileContent = wholeFileContent + wholeCborByteArray
187
+
188
+ #写入文件:
189
+ checkMemoryUsage(165)
190
+ extremeZipOutputFile=File.new( victoriaFresh['name'] + '.exz', 'wb') #创建文件
191
+ extremeZipOutputFile.syswrite(wholeFileContent) #写入文件
192
+ extremeZipOutputFile.close #关闭文件
193
+
194
+
195
+
196
+ end #def exz(rootPath)
197
+ end #class ExtremeZip
198
+
metadata CHANGED
@@ -1,14 +1,14 @@
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.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Hxcan Cai
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-05-06 00:00:00.000000000 Z
11
+ date: 2021-05-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: VictoriaFreSh
@@ -55,6 +55,7 @@ files:
55
55
  - bin/exuz
56
56
  - bin/exz
57
57
  - lib/extremeunzip.zzaqsu.rb
58
+ - lib/extremezip.zzaqsv.rb
58
59
  homepage: http://rubygems.org/gems/EXtremeZip
59
60
  licenses:
60
61
  - MIT