1- using System . IO . Compression ;
1+ using System . Buffers ;
2+ using ICSharpCode . SharpZipLib . GZip ;
23
34namespace GameFrameX . Utility ;
45
@@ -21,16 +22,13 @@ public static byte[] Compress(byte[] bytes)
2122 return bytes ;
2223 }
2324
24- using ( var uncompressed = new MemoryStream ( bytes ) )
25+ using ( var compressStream = new MemoryStream ( ) )
2526 {
26- using ( var compressed = new MemoryStream ( ) )
27+ using ( var gZipOutputStream = new GZipOutputStream ( compressStream ) )
2728 {
28- using ( var gZipStream = new GZipStream ( compressed , CompressionMode . Compress , true ) )
29- {
30- uncompressed . CopyTo ( gZipStream ) ;
31- }
32-
33- return compressed . ToArray ( ) ;
29+ gZipOutputStream . Write ( bytes , 0 , bytes . Length ) ;
30+ var press = compressStream . ToArray ( ) ;
31+ return press ;
3432 }
3533 }
3634 }
@@ -50,16 +48,29 @@ public static byte[] Decompress(byte[] bytes)
5048 return bytes ;
5149 }
5250
53- using ( var compressed = new MemoryStream ( bytes ) )
51+ using ( var compressedStream = new MemoryStream ( bytes ) )
5452 {
55- using ( var decompressed = new MemoryStream ( ) )
53+ using ( var gZipInputStream = new GZipInputStream ( compressedStream ) )
5654 {
57- using ( var gZipStream = new GZipStream ( compressed , CompressionMode . Decompress ) )
55+ using ( var decompressedStream = new MemoryStream ( ) )
5856 {
59- gZipStream . CopyTo ( decompressed ) ;
60- }
57+ var buffer = ArrayPool < byte > . Shared . Rent ( 8192 ) ;
58+ try
59+ {
60+ int count ;
61+ while ( ( count = gZipInputStream . Read ( buffer , 0 , buffer . Length ) ) != 0 )
62+ {
63+ decompressedStream . Write ( buffer , 0 , count ) ;
64+ }
65+ }
66+ finally
67+ {
68+ ArrayPool < byte > . Shared . Return ( buffer ) ;
69+ }
6170
62- return decompressed . ToArray ( ) ;
71+ var array = decompressedStream . ToArray ( ) ;
72+ return array ;
73+ }
6374 }
6475 }
6576 }
0 commit comments