首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DeflateStream关闭输入流

DeflateStream关闭输入流
EN

Stack Overflow用户
提问于 2016-06-17 15:23:39
回答 1查看 325关注 0票数 1

下面是我的C#方法,用于将zlib压缩数据和一些额外数据写入流:

代码语言:javascript
复制
  using (var compressor = new DeflateStream(compressStream, CompressionMode.Compress)) {
    compressor.Write(input, 0, input.Length);
    compressor.Close();
    compessStream.Write(extraData, 0, extraData.Length);
  }

当调用compressor.Close()时,它会自动关闭输入流。因此,我不能向流中写入额外的数据。

如果我在写入额外数据后关闭压缩器,数据的顺序将不再有效。我的额外数据在压缩数据之前写入,而不是像我预期的那样在之后写入。

为什么DeflateStream.Close()还要关闭输入流?除了编写一个封装实际流类并防止后者关闭的流类之外,有什么方法可以绕过它吗?致以问候。

EN

回答 1

Stack Overflow用户

发布于 2016-06-17 16:23:19

DeflateStream在关闭/处理时关闭底层流,因为它是这样设计的:

代码语言:javascript
复制
[__DynamicallyInvokable]
protected override void Dispose(bool disposing)
{
    try {
        this.PurgeBuffers(disposing);
    }
    finally {
        try {
            if (disposing && !this._leaveOpen && this._stream != null) {
                this._stream.Close();
            }
        }
        finally {
            this._stream = null;
            try {
                if (this.deflater != null)  {
                    this.deflater.Dispose();
                }
            }
            finally {
                this.deflater = null;
                base.Dispose(disposing);
            }
        }
    }
}

默认情况下,DeflateStream拥有基础流,因此关闭流也会关闭基础流。

您可以通过使用DeflateStream的specific constructor来控制此行为,该can允许您使基础流保持打开状态:

代码语言:javascript
复制
public DeflateStream(
    Stream stream,
    CompressionMode mode,
    bool leaveOpen
)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37875513

复制
相关文章

相似问题

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