喂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()