字符串压缩(字符串压缩,压缩级别); 字符串解压缩(string stringcodecompress);
2个答案
使用系统; 使用系统。 信息作战; 使用系统。 IO.压缩; 使用系统。 文本; ... 公共静态字符串压缩(字符串) { var bytes=编码。 Unicode码。 GetBytes(s)(获取字节数); using(var msi=新内存流(字节)) using(var mso=new MemoryStream()) { using(var gs=新GZipStream(mso,CompressionMode.Compress)) { msi。 抄送(gs); } return转换。 ToBase64String(mso.ToArray()); } } 公共静态字符串解压缩(字符串) { var字节=转换。 来自Base64字符串; using(var msi=新内存流(字节)) using(var mso=new MemoryStream()) { using(var gs=新GZipStream(msi,CompressionMode.Decompress)) { gs.复制到(mso); } return编码。 Unicode码。 获取字符串(mso.ToArray()); } }
公共静态字节[]压缩(字符串文本) { var bytes=编码。 Unicode码。 GetBytes(文本); 使用(var mso=new MemoryStream()) { using(var gs=新GZipStream(mso,CompressionMode.Compress)) { gs.Write(字节,0,字节.Length); } 返回mso。 ToArray(); } } 公共静态字符串解压缩(字节[]数据) { //读取最后4个字节以获取长度 byte[]lengthBuffer=新字节[4]; 阵列。 复制(data,data.Length-4,lengthBuffer,0,4); int uncompressedSize=BitConverter。 ToInt32(lengthBuffer,0); var buffer=新字节[uncompressedSize]; 使用(var-ms=新内存流(数据)) { using(var gzip=新GZipStream(ms,CompressionMode.Decompress)) { gzip。 读取(buffer,0,uncompressedSize); } } return编码。 Unicode码。 GetString(缓冲区); }
-
请注意 gzip。 读取(buffer,0,uncompressedSize) 可能无法实际读取整个流。 您可能需要在一个循环中重复调用,查看返回值,以跟踪实际读取到缓冲区中的字节数。 请参阅 github.com/dotnet/runtime/issues/62954 了解更多信息。 – 斯蒂芬·斯文森 评论 2023年6月25日4:18 -