C#
一种面向对象的类型安全的编程语言,它起源于 C 语言系列,包括对面向组件的编程的支持。
120 个问题
我在谷歌上搜索了这种方法并找到了这种方法,但不确定我是否应该接受这种方法?
这是代码
public static class StringCompression
{
/// <summary>
/// Compresses a string and returns a deflate compressed, Base64 encoded string.
/// </summary>
/// <param name="uncompressedString">String to compress</param>
public static string Compress(string uncompressedString)
{
byte[] compressedBytes;
using (var uncompressedStream = new MemoryStream(Encoding.UTF8.GetBytes(uncompressedString)))
{
using (var compressedStream = new MemoryStream())
{
// setting the leaveOpen parameter to true to ensure that compressedStream will not be closed when compressorStream is disposed
// this allows compressorStream to close and flush its buffers to compressedStream and guarantees that compressedStream.ToArray() can be called afterward
// although MSDN documentation states that ToArray() can be called on a closed MemoryStream, I don't want to rely on that very odd behavior should it ever change
using (var compressorStream = new DeflateStream(compressedStream, CompressionLevel.Fastest, true))
{
uncompressedStream.CopyTo(compressorStream);
}
// call compressedStream.ToArray() after the enclosing DeflateStream has closed and flushed its buffer to compressedStream
compressedBytes = compressedStream.ToArray();
}
}
return Convert.ToBase64String(compressedBytes);
}
/// <summary>
/// Decompresses a deflate compressed, Base64 encoded string and returns an uncompressed string.
/// </summary>
/// <param name="compressedString">String to decompress.</param>
public static string Decompress(string compressedString)
{
byte[] decompressedBytes;
var compressedStream = new MemoryStream(Convert.FromBase64String(compressedString));
using (var decompressorStream = new DeflateStream(compressedStream, CompressionMode.Decompress))
{
using (var decompressedStream = new MemoryStream())
{
decompressorStream.CopyTo(decompressedStream);
decompressedBytes = decompressedStream.ToArray();
}
}
return Encoding.UTF8.GetString(decompressedBytes);
}
以这种方式调用
var uncompressedString = "Hello World!";
var compressedString = uncompressedString.Compress();
var decompressedString = compressedString.Decompress();
以上代码取自 https://stackoverflow.com/a/43357353
或者我应该使用GZipStream来压缩和解压缩字符串数据吗?
哪种方法可以最大程度地压缩大字符串数据?请指教。
Note:此问题总结整理于: C# Best Method to reduce size of large string data
GZipStream 类使用 gzip 数据格式,其中包括用于检测数据损坏的循环冗余校验值。gzip 数据格式使用与 DeflateStream 类相同的压缩算法。 正如 Aaronaught 所说,如果您使用 GZipStream 来压缩文件,则可以通过 WinZip 或 gzip 工具等存档器打开结果。如果使用 DeflateStream 进行压缩,则这些工具将无法识别该文件。 这是您可以参考的相关线程。 使用 C#的压缩/解压缩字符串,
如果回复有帮助,请点击“接受答案”并点赞。
注意:如果您想接收此线程的相关电子邮件通知,请按照我们文档中的步骤启用电子邮件通知。