【问题标题】:GZipStream 4G limit - total or currently streaming?GZipStream 4G 限制 - 总数或当前流式传输?
【发布时间】:2011-07-28 20:27:37
【问题描述】:

GzipStream 喂一个 SSLStream

今天第一次注意到 “gzip 流不能包含超过 4GB 的数据。”

at System.IO.Compression.FastEncoder.GetCompressedOutput(Byte[] outputBuffer)
at System.IO.Compression.DeflateStream.InternalWrite(Byte[] array, Int32 offset, Int32 count, Boolean isAsync)
at System.IO.Compression.DeflateStream.Write(Byte[] array, Int32 offset, Int32 count)
at System.IO.Compression.GZipStream.Write(Byte[] array, Int32 offset, Int32 count)
at ...

网络写入器输入数据的速度比读取器获取数据的速度快。因此,我不清楚错误的原因。

这是对通过流写入的总字节数的限制,还是积压将数据从GZipStram 中取出并进入SSLStream 的问题?

Reader 能够在流结束之前解压缩并使用数据,所以我从没想过写入的总字节数可能会有这样的限制。

似乎没有办法检查长度。

有人可以分享他们如何处理此问题的示例吗?

代码大纲:

TcpClient network = = new TcpClient();
network.Connect(m_config.Address.Host, m_config.Address.Port);
SslStream sslStream = new SslStream(network.GetStream(), true .. ssl bits
Stream outStream = new GZipStream(sslStream, CompressionMode.Compress, true);

try {
    String nextMessage;
    while (messages.Dequeue(out nextMessage))
    {
        byte[] buffer = Encoding.UTF8.GetBytes(nextMessage + "\n");

        outStream.Write(buffer, 0, buffer.Length);
    }
} catch()

【问题讨论】:

    标签: c# .net exception gzipstream sslstream


    【解决方案1】:

    .NET Framework 2.0/3.0/3.5 中的 GZipStream 和 DeflateStream 类不支持读取/写入总计超过 4 GB 的数据。

    此限制已在 .NET Framework 4.0 中移除。

    【讨论】:

    • 谢谢。关闭 GZipStream 并创建一个新的 GZipStream 后我遇到了一些麻烦,最近被诊断为连接的另一端没有处理流的结尾并且也重新开始的问题。
    猜你喜欢
    • 2019-01-07
    • 1970-01-01
    • 2016-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-04
    • 2012-08-27
    • 1970-01-01
    相关资源
    最近更新 更多