0

我正在尝试(str)使用 SharpCompress' BZip2Stream 压缩字符串,但无法实现。以下是我到目前为止的代码,

public static string Compress(string str)
{
    var data = Encoding.UTF8.GetBytes(str);
    using (MemoryStream stream = new MemoryStream())
    {
        using (BZip2Stream zip = new BZip2Stream(stream, SharpCompress.Compressor.CompressionMode.Compress))
        {
            zip.Write(data, 0, data.Length);
            var compressed = Encoding.UTF8.GetString(stream.ToArray());
            return compressed;
        }
    }
}

无论我传递给str它什么字符串总是返回BZh

任何帮助是极大的赞赏!

4

1 回答 1

0

我相信您需要完成/关闭/刷新 bzip2 流,以确保在从内存流读取数据之前将所有压缩数据写入内存流。尝试:

using (MemoryMemoryStream stream = new MemoryStream())
{
    using (BZip2Stream zip = new BZip2Stream(stream, SharpCompress.Compressor.CompressionMode.Compress))
    {
        zip.Write(data, 0, data.Length);
        zip.Close();
    }
    var compressed = Encoding.UTF8.GetString(stream.ToArray());
    return compressed;
}
于 2015-08-31T07:26:41.640 回答