1

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か?

リーダーは、ストリームが終了する前にデータを解凍して使用できるため、書き込まれる合計バイト数にそのような制限があるとは思いもしませんでした。

長さを確認する方法はないようです。

彼らがこれをどのように処理したかについて、誰かが例を共有できますか?

コードの概要:

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

1 に答える 1

2

.NET Framework 2.0/3.0/3.5 の GZipStream および DeflateStream クラスは、合計 4 GB を超えるデータの読み取り/書き込みをサポートしていません。

この制限は、.NET Framework 4.0 で削除されました。

于 2011-07-28T21:07:08.447 に答える