public byte[] UncompressedData() { using (MemoryMappedFile file = MemoryMappedFile.CreateFromFile(Bundle.FileName, FileMode.Open)) { using (MemoryMappedViewStream viewstream = file.CreateViewStream(PageOFfset, ZSize, MemoryMappedFileAccess.Read)) { switch (CompressionType) { case "None": { using (MemoryStream destination = new MemoryStream()) { viewstream.CopyTo(destination); return(destination.ToArray()); } } case "Lz4": { var buffer = new byte[ZSize]; var c = viewstream.Read(buffer, 0, buffer.Length); var uncompressed = LZ4Codec.Decode(buffer, 0, c, (int)Size); return(uncompressed); } case "Snappy": { var buffer = new byte[ZSize]; var c = viewstream.Read(buffer, 0, buffer.Length); var uncompressed = SnappyCodec.Uncompress(buffer); return(uncompressed); } case "Doboz": { var buffer = new byte[ZSize]; var c = viewstream.Read(buffer, 0, buffer.Length); var uncompressed = DobozCodec.Decode(buffer, 0, c); return(uncompressed); } case "Zlib": { using (MemoryStream destination = new MemoryStream()) { var zlib = new ZlibStream(viewstream, CompressionMode.Decompress); zlib.CopyTo(destination); return(destination.ToArray()); } } default: throw new MissingCompressionException("Unhandled compression algorithm.") { Compression = Compression }; } } } }
/// <summary> /// Extract existing memory-mapped-file, /// decompress with the proper algorithm. /// </summary> /// <param name="output"></param> public void ExtractExistingMMF(Stream output, MemoryMappedFile memorymappedbundle) { /* var hash = *//*@"Global\" + *//*Archive.FileName.GetHashMD5(); * System.Console.WriteLine(hash); * using (MemoryMappedFile mmf = MemoryMappedFile.OpenExisting(hash, MemoryMappedFileRights.Read, HandleInheritability.Inheritable)) */ using (var viewstream = memorymappedbundle.CreateViewStream(PageOffset, ZSize, MemoryMappedFileAccess.Read)) { switch (CompressionType) { case "None": { viewstream.CopyTo(output); break; } case "Lz4": { var buffer = new byte[ZSize]; var c = viewstream.Read(buffer, 0, buffer.Length); var uncompressed = LZ4Codec.Decode(buffer, 0, c, (int)Size); output.Write(uncompressed, 0, uncompressed.Length); break; } case "Snappy": { var buffer = new byte[ZSize]; var c = viewstream.Read(buffer, 0, buffer.Length); var uncompressed = SnappyCodec.Uncompress(buffer); output.Write(uncompressed, 0, uncompressed.Length); break; } case "Doboz": { var buffer = new byte[ZSize]; var c = viewstream.Read(buffer, 0, buffer.Length); var uncompressed = DobozCodec.Decode(buffer, 0, c); output.Write(uncompressed, 0, uncompressed.Length); break; } case "Zlib": { var zlib = new ZlibStream(viewstream, CompressionMode.Decompress); zlib.CopyTo(output); break; } default: throw new MissingCompressionException("Unhandled compression algorithm.") { Compression = Compression }; } viewstream.Close(); } }
private byte[] GetCompressed(byte[] buffer) { switch (Compression) { case CompressionType.None: return(buffer); case CompressionType.ZLib: return(ZlibStream.CompressBuffer(buffer)); case CompressionType.Snappy: return(SnappyCodec.Compress(buffer)); case CompressionType.Doboz: return(DobozCodec.Encode(buffer, 0, buffer.Length)); case CompressionType.LZ4: return(LZ4.LZ4Codec.Encode(buffer, 0, buffer.Length)); case CompressionType.LZ4HC: return(LZ4.LZ4Codec.EncodeHC(buffer, 0, buffer.Length)); default: throw new MissingCompressionException("Unhandled compression algorithm.") { }; } }
public void Extract(Stream output) { using (var file = MemoryMappedFile.CreateFromFile(Bundle.FileName, FileMode.Open)) { using (var viewstream = file.CreateViewStream(Offset, ZSize, MemoryMappedFileAccess.Read)) { switch (CompressionType) { case "None": { viewstream.CopyTo(output); break; } case "Lz4": { var buffer = new byte[ZSize]; var c = viewstream.Read(buffer, 0, buffer.Length); var uncompressed = LZ4Codec.Decode(buffer, 0, c, (int)Size); output.Write(uncompressed, 0, uncompressed.Length); break; } case "Snappy": { var buffer = new byte[ZSize]; var c = viewstream.Read(buffer, 0, buffer.Length); var uncompressed = SnappyCodec.Uncompress(buffer); output.Write(uncompressed, 0, uncompressed.Length); break; } case "Doboz": { var buffer = new byte[ZSize]; var c = viewstream.Read(buffer, 0, buffer.Length); var uncompressed = DobozCodec.Decode(buffer, 0, c); output.Write(uncompressed, 0, uncompressed.Length); break; } case "Zlib": { var zlib = new ZlibStream(viewstream, CompressionMode.Decompress); zlib.CopyTo(output); break; } default: throw new MissingCompressionException("Unhandled compression algorithm.") { Compression = Compression }; } viewstream.Close(); } } }