2

我试图使用 DeflateStream 压缩字节数组。拧完数据后,我正在寻找一种关闭压缩的方法(标记为完成)。起初,我尝试了 Dispose(),然后是 Close(),但这些都使结果 MemoryStream 无法读取。然后我想我可能需要Flush(),但是描述说“这个方法的当前实现没有功能”

在此处输入图像描述

但似乎没有 Flush(),结果似乎是空的。“此方法的当前实现没有功能”是什么意思?

    static void Main(string[] args)
    {
        byte[] result = Encoding.UTF8.GetBytes("わたしのこいはみなみのかぜにのってはしるわ");
        var output = new MemoryStream();
        var dstream = new DeflateStream(output, CompressionLevel.Optimal);
        dstream.Write(result, 0, result.Length);
        var compressedSize1 = output.Position;
        dstream.Flush();
        var compressedSize2 = output.Position;

在此处输入图像描述

4

1 回答 1

2

“此方法的当前实现没有功能”是什么意思?

它的意思是:它什么都不做,所以单独调用Flush()是没有帮助的。您需要关闭 deflate 流以完成写入所需的内容,但不关闭底层流(块将在您写入流时写入,因为内部缓冲区已填满 - 但最终部分块无法写入,直到数据已准备好终止;并非所有压缩序列都支持能够在任意点刷新,然后在其他块中恢复压缩数据)

你可能想要的是:

using (var dstream = new DeflateStream(output, CompressionLevel.Optimal, true))
{
  // Your deflate code
}
// Now check the memory stream

注意额外的bool leaveOpen参数用法。

于 2021-04-05T05:09:10.880 回答