Beispiel #1
0
        /// <summary>
        /// 解压
        /// </summary>
        /// <param name="param"></param>
        /// <returns></returns>
        static public void DecompressByteZip(byte[] inBytes, uint startPos, uint inLen, ref byte[] outBytes, ref uint outLen)
        {
            byte[] writeData = new byte[4096];

            MemoryStream outStream = new MemoryStream();
            MemoryStream ms = new MemoryStream();
            ms.Write(inBytes, 0, (int)inLen);
            ms.Position = 0;

            ZipInputStream zipStream = new ZipInputStream(ms);
            zipStream.GetNextEntry();

            try
            {
                int size = 0;

                while ((size = zipStream.Read(writeData, 0, writeData.Length)) > 0)
                {
                    outStream.Write(writeData, 0, size);
                }

                zipStream.Flush();
                zipStream.Close();  // 一定要先 Close ZipOutputStream ,然后再获取 ToArray ,如果不关闭, ToArray 将不能返回正确的值

                outBytes = outStream.ToArray();
                outLen = (uint)outBytes.Length;

                outStream.Close();
            }
            finally
            {
                zipStream.Close();
                ms.Close();
                outStream.Close();
            }
        }