Пример #1
0
        /// <summary>
        /// 压缩数据流。
        /// </summary>
        /// <param name="algorithm">要使用的压缩算法。CompressionAlgorithms 类中提供了常用的压缩算法。</param>
        /// <param name="inputStream">指定输入流。</param>
        /// <param name="inputCount">输入流的长度,或 -1 以代表读至流的末尾。</param>
        /// <param name="outputStream">指定输出流。</param>
        /// <returns></returns>
        /// <exception cref="System.ArgumentNullException"></exception>
        public static void Compression(CompressionAlgorithm algorithm, CompressionMode mode, Stream inputStream, int inputCount, Stream outputStream)
        {
            if (algorithm == null || inputStream == null || outputStream == null) throw new ArgumentNullException();
            if (inputCount == 0)
                return;

            var countRead = 0;
            var lastTimeRead = 0;
            var inputBuffer = new byte[Compressor.ChunkSize];
            do {
                lastTimeRead = inputStream.Read(inputBuffer, 0, inputCount == -1 ? Compressor.ChunkSize : Math.Min(Compressor.ChunkSize, (inputCount - countRead)));
                if (lastTimeRead != 0) {
                    countRead += lastTimeRead;
                    if (mode == CompressionMode.Compress) {
                        var ret = algorithm.CompressFinalBlock(inputBuffer, 0, lastTimeRead);
                        outputStream.Write(ret, 0, ret.Length);
                    }
                    else {
                        var ret = algorithm.DecompressFinalBlock(inputBuffer, 0, lastTimeRead);
                        outputStream.Write(ret, 0, ret.Length);
                    }
                }
            }
            while ((countRead < inputCount && inputCount != -1) || (inputCount == -1 && lastTimeRead != 0));
        }
Пример #2
0
        /// <summary>
        /// 压缩数据流。
        /// </summary>
        /// <param name="algorithm">要使用的压缩算法。CompressionAlgorithms 类中提供了常用的压缩算法。</param>
        /// <param name="inputBuffer">指定输入缓冲区。</param>
        /// <returns></returns>
        /// <exception cref="System.ArgumentNullException"></exception>
        public static byte[] Compression(CompressionAlgorithm algorithm, CompressionMode mode, byte[] inputBuffer)
        {
            if (algorithm == null || inputBuffer == null) throw new ArgumentNullException();

            if (mode == CompressionMode.Compress)
                return algorithm.CompressFinalBlock(inputBuffer, 0, inputBuffer.Length);
            else
                return algorithm.DecompressFinalBlock(inputBuffer, 0, inputBuffer.Length);
        }