GZip 解压在任意点停止

Posted

技术标签:

【中文标题】GZip 解压在任意点停止【英文标题】:GZip decompression stops at arbitrary point 【发布时间】:2010-10-20 00:02:28 【问题描述】:

我正在使用 .Net GZipStream 类来压缩和解压缩文件。在我进行解压之后,数据看起来还不错,但是在某个看似任意的点之后变成了零。例如,解压文件后,它的大小是正确的 19KB,但字节 10,588 及以上都是零。

我不确定我做错了什么。

这就是我进行压缩的方式:

Byte[] bytes = GetFileBytes(file);

using (FileStream fileStream = new FileStream("Zipped.gz", FileMode.Create))

    using (GZipStream zipStream = new GZipStream(fileStream, CompressionMode.Compress))
    
        zipStream.Write(bytes, 0, bytes.Length);
    

这就是我的解压方式(Bytes 是压缩字节的数组,OriginalSize 是压缩前文件的大小):

using (MemoryStream memoryStream = new MemoryStream(Bytes))

    using (GZipStream zipStream = new GZipStream(memoryStream, CompressionMode.Decompress))
    
        // Note: Since the compressed version can be larger, I use the larger of the original and the compressed size for the decompressed array's size.
        Byte[] decompressedBytes = new Byte[OriginalSize > Bytes.Length ? OriginalSize : Bytes.Length];

        Int32 numRead = zipStream.Read(decompressedBytes, 0, Bytes.Length);

        using (FileStream fileStream = new FileStream("Decompressed.txt", Name), FileMode.Create))
        
            fileStream.Write(decompressedBytes, 0, Convert.ToInt32(OriginalSize));
        
    

【问题讨论】:

你知道它是在解压还是压缩 - 你可以通过使用 gzip 手动解压/压缩文件来检查。 【参考方案1】:

我在这里看到一个潜在的错误:您做出假设! :) 在流之间复制时必须使用循环,请参阅this question

【讨论】:

嗯,不 :) 再看看那个链接 :) (你甚至可以使用那里的方法,这是最简单的)

以上是关于GZip 解压在任意点停止的主要内容,如果未能解决你的问题,请参考以下文章

在java中,gzip 压缩和解压多个文件?

Linux命令(28):gzip/gunzip命令-压缩和解压

GZIP压缩和解压

Gzip压缩与解压

如何解压.tar.gz gzip gz 类型文档

在任意点设计中心创建分支以修改 RAML 更改