C# 减小大型字符串数据大小的最佳方法

Jiale Xue - MSFT 34,361 信誉分 Microsoft 供应商
2024-04-19T05:47:41.8066667+00:00

我在谷歌上搜索了这种方法并找到了这种方法,但不确定我是否应该接受这种方法?

这是代码

    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

C#
C#
一种面向对象的类型安全的编程语言,它起源于 C 语言系列,包括对面向组件的编程的支持。
120 个问题
0 个注释 无注释
{count} 票

1 个答案

排序依据: 非常有帮助
  1. Hui Liu-MSFT 40,786 信誉分 Microsoft 供应商
    2024-04-19T07:58:12.75+00:00

    GZipStream 类使用 gzip 数据格式,其中包括用于检测数据损坏的循环冗余校验值。gzip 数据格式使用与 DeflateStream 类相同的压缩算法。 正如 Aaronaught 所说,如果您使用 GZipStream 来压缩文件,则可以通过 WinZip 或 gzip 工具等存档器打开结果。如果使用 DeflateStream 进行压缩,则这些工具将无法识别该文件。 这是您可以参考的相关线程。 使用 C#的压缩/解压缩字符串


    如果回复有帮助,请点击“接受答案”并点赞。

    注意:如果您想接收此线程的相关电子邮件通知,请按照我们文档中的步骤启用电子邮件通知。

    0 个注释 无注释