Skip to content

Commit 0f7a1e4

Browse files
committed
[修改]1. 修改压缩和解压缩的实现方式为 ICSharpCode.SharpZipLib
GameFrameX/GameFrameX.Unity#28
1 parent ba5ddfa commit 0f7a1e4

File tree

2 files changed

+30
-21
lines changed

2 files changed

+30
-21
lines changed

Runtime/Network/Helper/DefaultMessageCompressHandler.cs

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
using System.IO;
2-
using System.IO.Compression;
2+
using ICSharpCode.SharpZipLib.GZip;
33

44
namespace 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
}

Runtime/Network/Helper/DefaultMessageDecompressHandler.cs

Lines changed: 22 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
1-
using System.IO;
2-
using System.IO.Compression;
1+
using System.Buffers;
2+
using System.IO;
3+
using ICSharpCode.SharpZipLib.GZip;
34

45
namespace 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
}

0 commit comments

Comments
 (0)