File tree Expand file tree Collapse file tree 2 files changed +30
-21
lines changed
Expand file tree Collapse file tree 2 files changed +30
-21
lines changed Original file line number Diff line number Diff line change 11using System . IO ;
2- using System . IO . Compression ;
2+ using ICSharpCode . SharpZipLib . GZip ;
33
44namespace GameFrameX . Network . Runtime
55{
@@ -22,20 +22,17 @@ public byte[] Handler(byte[] message)
2222 /// <summary>
2323 /// 压缩数据。
2424 /// </summary>
25- /// <param name="bytes "></param>
25+ /// <param name="inputBytes "></param>
2626 /// <returns></returns>
27- static byte [ ] Compress ( byte [ ] bytes )
27+ static byte [ ] Compress ( byte [ ] inputBytes )
2828 {
29- using ( var uncompressed = new MemoryStream ( bytes ) )
29+ using ( var compressStream = new MemoryStream ( ) )
3030 {
31- using ( var compressed = new MemoryStream ( ) )
31+ using ( var gZipOutputStream = new GZipOutputStream ( compressStream ) )
3232 {
33- using ( var gZipStream = new GZipStream ( compressed , CompressionMode . Compress , true ) )
34- {
35- uncompressed . CopyTo ( gZipStream ) ;
36- }
37-
38- return compressed . ToArray ( ) ;
33+ gZipOutputStream . Write ( inputBytes , 0 , inputBytes . Length ) ;
34+ var press = compressStream . ToArray ( ) ;
35+ return press ;
3936 }
4037 }
4138 }
Original file line number Diff line number Diff line change 1- using System . IO ;
2- using System . IO . Compression ;
1+ using System . Buffers ;
2+ using System . IO ;
3+ using ICSharpCode . SharpZipLib . GZip ;
34
45namespace GameFrameX . Network . Runtime
56{
@@ -26,18 +27,29 @@ public byte[] Handler(byte[] message)
2627 /// <returns></returns>
2728 static byte [ ] Decompress ( byte [ ] bytes )
2829 {
29- using ( var compressed = new MemoryStream ( bytes ) )
30+ using ( var compressedStream = new MemoryStream ( bytes ) )
3031 {
31- using ( var decompressed = new MemoryStream ( ) )
32+ using ( var gZipInputStream = new GZipInputStream ( compressedStream ) )
3233 {
33- // 注意: 这里第一个参数同样是填写压缩的数据,但是这次是作为输入的数据
34- using ( var gZipStream = new GZipStream ( compressed , CompressionMode . Decompress ) )
34+ using ( var decompressedStream = new MemoryStream ( ) )
3535 {
36- gZipStream . CopyTo ( decompressed ) ;
37- }
36+ var buffer = ArrayPool < byte > . Shared . Rent ( 8192 ) ;
37+ try
38+ {
39+ int count ;
40+ while ( ( count = gZipInputStream . Read ( buffer , 0 , buffer . Length ) ) != 0 )
41+ {
42+ decompressedStream . Write ( buffer , 0 , count ) ;
43+ }
44+ }
45+ finally
46+ {
47+ ArrayPool < byte > . Shared . Return ( buffer ) ;
48+ }
3849
39- var result = decompressed . ToArray ( ) ;
40- return result ;
50+ var array = decompressedStream . ToArray ( ) ;
51+ return array ;
52+ }
4153 }
4254 }
4355 }
You can’t perform that action at this time.
0 commit comments