private static byte[] CompressData(Stream Input) { byte[] Buffer = new byte[CompressedHeader.DEFAULT_CHUNK_SIZE]; using (var MS = new MemoryStream()) { using (var BW = new BinaryWriter(MS)) { int total = 0; do { total = Input.Read(Buffer, 0, Buffer.Length); if (total > 0) { var Header = new CompressedHeader(); Header.DecompressedLength = (ulong)total; var Compressed = Ionic.Zlib.ZlibStream.CompressBuffer(Buffer); Header.CompressedLength = (ulong)Compressed.Length; Header.WriteHeader(BW); BW.Write(Compressed); } } while (total > 0); BW.Flush(); return(MS.ToArray()); } } }
private static byte[] DecompressData(Stream Input) { using (var MS = new MemoryStream()) { CompressedHeader Header; do { Header = new CompressedHeader(Input); byte[] Data = new byte[Header.CompressedLength]; Input.Read(Data, 0, Data.Length); Data = Ionic.Zlib.ZlibStream.UncompressBuffer(Data); MS.Write(Data, 0, Data.Length); }while (Header.DecompressedLength == Header.MaxChunkSize); return(MS.ToArray()); } }