/// <summary> /// 压缩数据 /// </summary> /// <param name="isFastestCompressionLevel"></param> internal void Compress(bool isFastestCompressionLevel) #endif { switch (Type) { case Net.Http.ResponseType.ByteArray: Body.SetFull(); goto SUBBYTEARRAY; case Net.Http.ResponseType.SubByteArray: SUBBYTEARRAY: if (Body.Length > GZipHeaderSize + 256) { SubArray <byte> compressData = new SubArray <byte>(); try { #if DOTNET2 || DOTNET4 if (AutoCSer.IO.Compression.GzipCompressor.Get(Body.Array, Body.Start, Body.Length, ref SubBuffer, ref compressData, 0, GZipHeaderSize)) #else if (AutoCSer.IO.Compression.GzipCompressor.Get(Body.Array, Body.Start, Body.Length, ref SubBuffer, ref compressData, 0, GZipHeaderSize, isFastestCompressionLevel)) #endif { Body = compressData; Type = compressData.Array == SubBuffer.Buffer ? ResponseType.SubBuffer : ResponseType.SubByteArray; ContentEncoding = GZipEncoding; Flag |= ResponseFlag.ContentEncoding; } } finally { if (Type != ResponseType.SubBuffer) { SubBuffer.Free(); } } } return; case Net.Http.ResponseType.SubBuffer: if (Body.Length > GZipHeaderSize + 256) { SubBuffer.PoolBufferFull compressBuffer = default(SubBuffer.PoolBufferFull); SubArray <byte> compressData = new SubArray <byte>(); byte isCompress = 0; try { #if DOTNET2 || DOTNET4 if (AutoCSer.IO.Compression.GzipCompressor.Get(Body.Array, Body.Start, Body.Length, ref compressBuffer, ref compressData, 0, GZipHeaderSize)) #else if (AutoCSer.IO.Compression.GzipCompressor.Get(Body.Array, Body.Start, Body.Length, ref compressBuffer, ref compressData, 0, GZipHeaderSize, isFastestCompressionLevel)) #endif { isCompress = 1; SubBuffer.Free(); Body = compressData; if (compressData.Array == compressBuffer.Buffer) { SubBuffer = compressBuffer; } else { Type = ResponseType.SubByteArray; } ContentEncoding = GZipEncoding; Flag |= ResponseFlag.ContentEncoding; } } finally { if (isCompress == 0 || Type != ResponseType.SubBuffer) { compressBuffer.Free(); } } } return; } }