1
1
{ ***************************************************************************
2
2
3
- Copyright (c) 2016-2017 Kike Pérez
3
+ Copyright (c) 2016-2019 Kike Pérez
4
4
5
5
Unit : Quick.Compression
6
6
Description : Compression functions
7
7
Author : Kike Pérez
8
- Version : 1.1
8
+ Version : 1.2
9
9
Created : 14/08/2018
10
- Modified : 20/08/2018
10
+ Modified : 05/09/2019
11
11
12
12
This file is part of QuickLib: https://github.com/exilon/QuickLib
13
13
@@ -34,19 +34,26 @@ interface
34
34
35
35
uses
36
36
Classes,
37
- System.SysUtils,
38
- System.ZLib;
37
+ SysUtils,
38
+ ZLib,
39
+ System.NetEncoding;
39
40
40
41
type
41
42
42
43
TCompressionLevel = TZCompressionLevel;
43
44
44
- function CompressString (const aStr : string; aLevel : TCompressionLevel = zcDefault) : string;
45
+ function CompressString_Deprecated (const aStr : string; aCompressionLevel : TCompressionLevel = zcDefault) : string;
46
+ function DecompressString_Deprecated (const aStr: string) : string;
47
+ function CompressString (const aStr : string; aCompressionLevel : TCompressionLevel = zcDefault) : string;
45
48
function DecompressString (const aStr: string) : string;
49
+ function CompressGZipString (const aStr : string; aCompressionLevel : TCompressionLevel = zcDefault) : string;
50
+ function DecompressGZipString (const aStr: string) : string;
51
+ function CompressAndEncodeString (const aStr: string; aCompressionLevel : TCompressionLevel = zcDefault): string;
52
+ function DecodeAndDecompressString (const aStr: string): string;
46
53
47
54
implementation
48
55
49
- function CompressString (const aStr : string; aLevel : TCompressionLevel = zcDefault) : string;
56
+ function CompressString_Deprecated (const aStr : string; aCompressionLevel : TCompressionLevel = zcDefault) : string;
50
57
var
51
58
strstream : TStringStream;
52
59
zipstream : TStringStream;
@@ -55,7 +62,7 @@ function CompressString(const aStr : string; aLevel : TCompressionLevel = zcDefa
55
62
try
56
63
zipstream := TStringStream.Create(' ' ,TEncoding.ANSI);
57
64
try
58
- ZCompressStream(strstream, zipstream, aLevel );
65
+ ZCompressStream(strstream, zipstream, aCompressionLevel );
59
66
zipstream.Position := 0 ;
60
67
Result := zipstream.DataString;
61
68
finally
@@ -66,7 +73,7 @@ function CompressString(const aStr : string; aLevel : TCompressionLevel = zcDefa
66
73
end ;
67
74
end ;
68
75
69
- function DecompressString (const aStr: string) : string;
76
+ function DecompressString_Deprecated (const aStr: string) : string;
70
77
var
71
78
strstream : TStringStream;
72
79
zipstream : TStringStream;
@@ -75,7 +82,8 @@ function DecompressString(const aStr: string) : string;
75
82
try
76
83
strstream := TStringStream.Create(' ' ,TEncoding.UTF8);
77
84
try
78
- ZDecompressStream(zipstream, strstream);
85
+ zipstream.Position := 0 ;
86
+ ZDecompressStream(zipstream,strstream);
79
87
strstream.Position := 0 ;
80
88
Result := strstream.DataString;
81
89
finally
@@ -86,4 +94,169 @@ function DecompressString(const aStr: string) : string;
86
94
end ;
87
95
end ;
88
96
97
+ function CompressString (const aStr : string; aCompressionLevel : TCompressionLevel = zcDefault) : string;
98
+ var
99
+ instream : TStringStream;
100
+ zipstream : TMemoryStream;
101
+ outstream : TStringStream;
102
+ begin
103
+ instream := TStringStream.Create(aStr,TEncoding.UTF8);
104
+ try
105
+ zipstream := TMemoryStream.Create;
106
+ try
107
+ ZCompressStream(instream,zipstream,aCompressionLevel);
108
+ zipstream.Position := 0 ;
109
+ outstream := TStringStream.Create(' ' ,TEncoding.UTF8);
110
+ try
111
+ outstream.CopyFrom(zipstream,0 );
112
+ Result := string(outstream.DataString);
113
+ finally
114
+ outstream.Free;
115
+ end ;
116
+ finally
117
+ zipstream.Free;
118
+ end ;
119
+ finally
120
+ instream.Free;
121
+ end ;
122
+ end ;
123
+
124
+ function DecompressString (const aStr: string) : string;
125
+ var
126
+ instream : TStringStream;
127
+ zipstream : TMemoryStream;
128
+ outstream : TStringStream;
129
+ begin
130
+ instream := TStringStream.Create(aStr,TEncoding.UTF8);
131
+ try
132
+ zipstream := TStringStream.Create;
133
+ try
134
+ zipstream.CopyFrom(instream,0 );
135
+ outstream := TStringStream.Create(' ' ,TEncoding.UTF8);
136
+ try
137
+ ZDecompressStream(zipstream,outstream);
138
+ outstream.Position := 0 ;
139
+ Result := string(outstream.DataString);
140
+ finally
141
+ outstream.Free;
142
+ end ;
143
+ finally
144
+ zipstream.Free;
145
+ end ;
146
+ finally
147
+ instream.Free;
148
+ end ;
149
+ end ;
150
+
151
+ function CompressGZipString (const aStr : string; aCompressionLevel : TCompressionLevel = zcDefault) : string;
152
+ var
153
+ instream : TStringStream;
154
+ outstream : TStringStream;
155
+ zipstream : TZCompressionStream;
156
+ begin
157
+ outstream := TStringStream.Create(' ' ,TEncoding.ANSI);
158
+ try
159
+ zipstream := TZCompressionStream.Create(outstream,System.ZLib.TZCompressionLevel(aCompressionLevel),15 + 16 );
160
+ try
161
+ instream := TStringStream.Create(aStr,TEncoding.UTF8);
162
+ try
163
+ instream.Position := 0 ;
164
+ zipstream.CopyFrom(instream,instream.Size);
165
+ finally
166
+ instream.Free;
167
+ end ;
168
+ finally
169
+ zipstream.Free;
170
+ end ;
171
+ outstream.Position := 0 ;
172
+ Result := outstream.DataString;
173
+ finally
174
+ outstream.Free;
175
+ end ;
176
+
177
+ end ;
178
+
179
+ function DecompressGZipString (const aStr: string) : string;
180
+ var
181
+ outstream : TStringStream;
182
+ instream : TStringStream;
183
+ unzipstream : TZDecompressionStream;
184
+ begin
185
+ outstream := TStringStream.Create(' ' ,TEncoding.UTF8);
186
+ try
187
+ instream := TStringStream.Create(aStr,TEncoding.ANSI);
188
+ try
189
+ unzipstream := nil ;
190
+ try
191
+ unzipstream := TZDecompressionStream.Create(instream,15 + 16 );
192
+ outstream.CopyFrom(unzipstream,0 );
193
+ finally
194
+ unzipstream.Free;
195
+ end ;
196
+ finally
197
+ instream.Free;
198
+ end ;
199
+ outstream.Position := 0 ;
200
+ Result := outstream.DataString;
201
+ finally
202
+ outstream.Free;
203
+ end ;
204
+ end ;
205
+
206
+ function CompressAndEncodeString (const aStr: string; aCompressionLevel : TCompressionLevel = zcDefault): string;
207
+ var
208
+ utf8stream: TStringStream;
209
+ zipstream: TMemoryStream;
210
+ base64stream: TStringStream;
211
+ begin
212
+ utf8stream := TStringStream.Create(aStr,TEncoding.UTF8);
213
+ try
214
+ zipstream := TMemoryStream.Create;
215
+ try
216
+ ZCompressStream(utf8stream,zipstream,TZCompressionLevel(aCompressionLevel));
217
+ base64stream := TStringStream.Create(' ' ,TEncoding.ASCII);
218
+ try
219
+ zipstream.Position := 0 ;
220
+ TNetEncoding.Base64.Encode(zipstream,base64stream);
221
+ base64stream.Position := 0 ;
222
+ Result := string(base64stream.DataString);
223
+ finally
224
+ base64stream.Free;
225
+ end ;
226
+ finally
227
+ zipstream.Free;
228
+ end ;
229
+ finally
230
+ utf8stream.Free;
231
+ end ;
232
+ end ;
233
+
234
+ function DecodeAndDecompressString (const aStr: string): string;
235
+ var
236
+ utf8stream: TStringStream;
237
+ zipstream: TMemoryStream;
238
+ base64stream: TStringStream;
239
+ begin
240
+ base64stream := TStringStream.Create(aStr,TEncoding.ASCII);
241
+ try
242
+ zipstream := TMemoryStream.Create;
243
+ try
244
+ base64stream.Position := 0 ;
245
+ TNetEncoding.Base64.Decode(base64stream,zipstream);
246
+ zipstream.Position := 0 ;
247
+ utf8stream := TStringStream.Create(' ' ,TEncoding.UTF8);
248
+ try
249
+ ZDecompressStream(zipstream,utf8stream);
250
+ Result := string(utf8stream.DataString);
251
+ finally
252
+ utf8stream.Free;
253
+ end ;
254
+ finally
255
+ zipstream.Free;
256
+ end ;
257
+ finally
258
+ base64stream.Free;
259
+ end ;
260
+ end ;
261
+
89
262
end .
0 commit comments