/// <summary> /// Uncompress a DEFLATE'd byte array into a single string. /// </summary> /// /// <seealso cref="DeflateStream.CompressString(String)">DeflateStream.CompressString(String)</seealso> /// <seealso cref="DeflateStream.UncompressBuffer(byte[])">DeflateStream.UncompressBuffer(byte[])</seealso> /// <seealso cref="GZipStream.UncompressString(byte[])">GZipStream.UncompressString(byte[])</seealso> /// <seealso cref="ZlibStream.UncompressString(byte[])">ZlibStream.UncompressString(byte[])</seealso> /// /// <param name="compressed"> /// A buffer containing DEFLATE-compressed data. /// </param> /// /// <returns>The uncompressed string</returns> public static String UncompressString(byte[] compressed) { using (var input = new System.IO.MemoryStream(compressed)) { System.IO.Stream decompressor = new DeflateStream(input, CompressionMode.Decompress); return ZlibBaseStream.UncompressString(compressed, decompressor); } }
public void LocalFileCheck() { if (FileStatus != ZipReturn.ZipUntested) return; try { Stream sInput = null; _zipFs.Seek((long)_dataLocation, SeekOrigin.Begin); switch (_compressionMethod) { case 8: sInput = new DeflateStream(_zipFs, CompressionMode.Decompress, true); break; case 0: sInput = _zipFs; break; } if (sInput == null) { FileStatus = ZipReturn.ZipErrorGettingDataStream; return; } CRC32Hash crc32 = new CRC32Hash(); MD5 lmd5 = System.Security.Cryptography.MD5.Create(); SHA1 lsha1 = System.Security.Cryptography.SHA1.Create(); ulong sizetogo = UncompressedSize; if (_buffer == null) _buffer = new byte[Buffersize]; while (sizetogo > 0) { int sizenow = sizetogo > Buffersize ? Buffersize : (int)sizetogo; sInput.Read(_buffer, 0, sizenow); crc32.TransformBlock(_buffer, 0, sizenow, null, 0); lmd5.TransformBlock(_buffer, 0, sizenow, null, 0); lsha1.TransformBlock(_buffer, 0, sizenow, null, 0); sizetogo = sizetogo - (ulong)sizenow; } crc32.TransformFinalBlock(_buffer, 0, 0); lmd5.TransformFinalBlock(_buffer, 0, 0); lsha1.TransformFinalBlock(_buffer, 0, 0); byte[] testcrc = crc32.Hash; md5 = lmd5.Hash; sha1 = lsha1.Hash; if (_compressionMethod == 8) { sInput.Close(); sInput.Dispose(); } FileStatus = ByteArrCompare(CRC, testcrc) ? ZipReturn.ZipGood : ZipReturn.ZipCRCDecodeError; } catch { FileStatus = ZipReturn.ZipDecodeError; } }
/// <summary> /// Compress a string into a byte array using DEFLATE (RFC 1951). /// </summary> /// /// <remarks> /// Uncompress it with <see cref="DeflateStream.UncompressString(byte[])"/>. /// </remarks> /// /// <seealso cref="DeflateStream.UncompressString(byte[])">DeflateStream.UncompressString(byte[])</seealso> /// <seealso cref="DeflateStream.CompressBuffer(byte[])">DeflateStream.CompressBuffer(byte[])</seealso> /// <seealso cref="GZipStream.CompressString(string)">GZipStream.CompressString(string)</seealso> /// <seealso cref="ZlibStream.CompressString(string)">ZlibStream.CompressString(string)</seealso> /// /// <param name="s"> /// A string to compress. The string will first be encoded /// using UTF8, then compressed. /// </param> /// /// <returns>The string in compressed form</returns> public static byte[] CompressString(String s) { using (var ms = new System.IO.MemoryStream()) { System.IO.Stream compressor = new DeflateStream(ms, CompressionMode.Compress, CompressionLevel.BestCompression); ZlibBaseStream.CompressString(s, compressor); return ms.ToArray(); } }