我在互联网上创建了以下代码来进行字符串压缩。当我压缩一个简单的字符串时,返回值是非常不同的。
例如,压缩( “ABC”)返回 “AwAAAB + LCAAAAAAABADtvQdgHEmWJSYvbcp7f0r1StfgdKEIgGATJNiQQBDswYjN5pLsHWlHIymrKoHKZVZlXWYWQMztnbz33nvvvffee ++ 997o7nU4n99 // P1xmZAFs9s5K2smeIYCqyB8 / fnwfPyKyyfT / AcJBJDUDAAAA”
我可以采用简单的字符串结果。
由于
using System.IO.Compression;
using System.Text;
using System.IO;
public static string Compress(string text)
{
byte[] buffer = Encoding.UTF8.GetBytes(text);
MemoryStream ms = new MemoryStream();
using (GZipStream zip = new GZipStream(ms, CompressionMode.Compress, true))
{
zip.Write(buffer, 0, buffer.Length);
}
ms.Position = 0;
MemoryStream outStream = new MemoryStream();
byte[] compressed = new byte[ms.Length];
ms.Read(compressed, 0, compressed.Length);
byte[] gzBuffer = new byte[compressed.Length + 4];
System.Buffer.BlockCopy(compressed, 0, gzBuffer, 4, compressed.Length);
System.Buffer.BlockCopy(BitConverter.GetBytes(buffer.Length), 0, gzBuffer, 0, 4);
return Convert.ToBase64String (gzBuffer);
}
答案 0 :(得分:0)
您正在使用的代码用于压缩非常大的字符串。它使用GZip压缩算法压缩源字符串,然后使用BASE64编码使其可读(或可用/“可通过”)。
Base64将源字符串扩展到~1.33倍(8位符号编码为6位+ 2位溢出,用于下一个符号)。所以要理解字符串必须从源长度压缩至少70%。
使用该编码时,结果是预期的和通常的。
要回答您的问题,请通过“简单字符串结果”
定义您的意思
答案 1 :(得分:0)
当然,因为结果是在base64中(请参阅代码中的最后一行)。
答案 2 :(得分:0)
由于以下几个原因,压缩并不总是导致较小的输出:
Base64在这里是一个重点,是的,但是不要忘记这些关于压缩的小事实。