Compress and decompress a Stream with Compression.DeflateStream(使用 Compression.DeflateStream 压缩和解压缩流)
问题描述
我正在尝试使用 压缩和解压缩流压缩.放气流.压缩似乎工作正常,因为下面的代码将我的 Stream 压缩为 110 字节长的数组.但是,读取解压后的 Stream 会产生一个空字符串.
I am trying to compress and decompress a Stream using Compression.DeflateStream. Compressing seems to work correctly since the code below compresses my Stream to a 110 bytes long array. However, reading the decompressed Stream results in an empty string.
class Program
{
    static void Main(string[] args)
    {
        // Compress a random string value
        string value = Path.GetRandomFileName();
        byte[] compressedBytes;
        using (var writer = new StreamWriter(new MemoryStream()))
        {
            writer.Write(value);
            writer.Flush();
            writer.BaseStream.Position = 0;
            compressedBytes = Compress(writer.BaseStream);
        }
        // Decompress compressed bytes
        Stream decompressedStream = Decompress(compressedBytes);
        // here already applies: decompressedStream.Length == 0
        using (var reader = new StreamReader(decompressedStream))
        {
            string decompressedValue = reader.ReadToEnd();
            if (value == decompressedValue)
                Console.WriteLine("Success");
            else
                Console.WriteLine("Failed");
        }
    }
    private static byte[] Compress(Stream input)
    {
        using (var compressStream = new MemoryStream())
        using (var compressor = new DeflateStream(compressStream, CompressionMode.Compress))
        {
            input.CopyTo(compressor);
            return compressStream.ToArray();
        }
    }
    private static Stream Decompress(byte[] input)
    {
        var output = new MemoryStream();
        using (var compressStream = new MemoryStream(input))
        using (var decompressor = new DeflateStream(compressStream, CompressionMode.Decompress))
            decompressor.CopyTo(output);
        output.Position = 0;
        return output;
    }
}
谁能帮我解决这个问题?非常感谢.
Can anyone help me on this one? Many thanks.
推荐答案
修复您的 Compress 功能:
private static byte[] Compress(Stream input)
{
    using(var compressStream = new MemoryStream())
    using(var compressor = new DeflateStream(compressStream, CompressionMode.Compress))
    {
        input.CopyTo(compressor);
        compressor.Close();
        return compressStream.ToArray();
    }
}
在返回结果字节数组之前未刷新压缩流.
compressed stream was not flushed before returning the resulting byte array.
这篇关于使用 Compression.DeflateStream 压缩和解压缩流的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:使用 Compression.DeflateStream 压缩和解压缩流
				
        
 
            
        - CanBeNull和ReSharper-将其用于异步任务? 2022-01-01
 - 在 LINQ to SQL 中使用 contains() 2022-01-01
 - 在 C# 中异步处理项目队列 2022-01-01
 - Windows 喜欢在 LINUX 中使用 MONO 进行服务开发? 2022-01-01
 - Azure Active Directory 与 MVC,客户端和资源标识同一 2022-01-01
 - C# 通过连接字符串检索正确的 DbConnection 对象 2022-01-01
 - 带问号的 nvarchar 列结果 2022-01-01
 - 使用 rss + c# 2022-01-01
 - 为什么 C# 中的堆栈大小正好是 1 MB? 2022-01-01
 - 是否可以在 .Net 3.5 中进行通用控件? 2022-01-01
 
						
						
						
						
						