GZipStream 4G限制-总或当前流

本文关键字:4G 限制 GZipStream | 更新日期: 2023-09-27 18:03:57

让一个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 ...

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

这是对通过流写入的总字节的限制,还是这是积压将数据从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()

GZipStream 4G限制-总或当前流

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

此限制已在。net Framework 4.0中删除。