问题描述
我正在尝试使用 压缩和解压缩流压缩.放气流.压缩似乎工作正常,因为下面的代码将我的 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.