首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SharpZipLib不压缩内存流

SharpZipLib不压缩内存流
EN

Stack Overflow用户
提问于 2017-03-31 22:26:21
回答 1查看 457关注 0票数 1

我有一个要压缩的内存流:

代码语言:javascript
复制
public static MemoryStream ZipChunk(MemoryStream unZippedChunk) {

        MemoryStream zippedChunk = new MemoryStream();

        ZipOutputStream zipOutputStream = new ZipOutputStream(zippedChunk);
        zipOutputStream.SetLevel(3);

        ZipEntry entry = new ZipEntry("name");
        zipOutputStream.PutNextEntry(entry);

        Utils.StreamCopy(unZippedChunk, zippedChunk, new byte[4096]);
        zipOutputStream.CloseEntry();

        zipOutputStream.IsStreamOwner = false;
        zipOutputStream.Close();
        zippedChunk.Close();

        return zippedChunk;
    }

public static void StreamCopy(Stream source, Stream destination, byte[] buffer, bool bFlush = true) {
        bool flag = true;
        while (flag) {

            int num = source.Read(buffer, 0, buffer.Length);
            if (num > 0) {                    
                destination.Write(buffer, 0, num);
            }

            else {

                if (bFlush) {                        
                    destination.Flush();
                }

                flag = false;
            }
        }           
    }

应该很简单的。您为它提供了要压缩的流。这些方法压缩流并返回它。太棒了。

然而,我没有得到压缩的流回来。我得到的是在开头和结尾添加了大约20个字节的流,它们似乎与zip库有关。但是中间的数据是完全未压缩的(值相同的256个字节范围,等等)。我试着把水平提高到9级,但没什么改变。

为什么我的溪流不压缩?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-31 22:31:51

您自己通过以下方法将原始流复制到输出流中:

代码语言:javascript
复制
Utils.StreamCopy(unZippedChunk, zippedChunk, new byte[4096]);

您应该复制到zipOutputStream,而不是:

代码语言:javascript
复制
StreamCopy(unZippedChunk, zipOutputStream, new byte[4096]);

附带注意:不要使用自定义复制流方法--使用默认的方法:

代码语言:javascript
复制
unZippedChunk.CopyTo(zipOutputStream);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43150555

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档