public void Decompress(Stream input) { Table = ChunkedLz4FileTable.Read(input, ChunkCount); PartialHeaderSize = HeaderSize - (input.Position); TrailingFileHeaderContent = new byte[PartialHeaderSize]; input.Read(TrailingFileHeaderContent); input.Position = HeaderSize; var data = new byte[HeaderSize + Table.Chunks.Sum(c => c.DecompressedChunkSize)]; foreach (var chunk in Table.Chunks) { chunk.Read(input); } byte[] buffer = new byte[input.Length - input.Position]; input.Read(buffer, 0, buffer.Length); RestOfContent = buffer; int index = 0; if (Directory.Exists("decompressed")) { Directory.Delete("decompressed", true); } Directory.CreateDirectory("decompressed"); foreach (var chunk in Table.Chunks) { File.WriteAllBytes($"decompressed/chunk_{index}.bin", chunk.DecompressedData); index++; } }
public byte[] Decompress(Stream input) { ReadHeader(input); Table = ChunkedLz4FileTable.Read(input, MetaInformation.ChunkCount); MetaInformation.PartialHeaderSize = MetaInformation.HeaderSize - (input.Position); MetaInformation.TrailingFileHeaderContent = new byte[MetaInformation.PartialHeaderSize]; input.Read(MetaInformation.TrailingFileHeaderContent); input.Position = MetaInformation.HeaderSize; var data = new byte[MetaInformation.HeaderSize + Table.Chunks.Sum(c => c.DecompressedChunkSize)]; foreach (var chunk in Table.Chunks) { chunk.Read(input); } byte[] buffer = new byte[input.Length - input.Position]; input.Read(buffer, 0, buffer.Length); MetaInformation.RestOfContent = buffer; int index = 0; byte[] result; using (var stream = new MemoryStream()) { byte[] header = new byte[MetaInformation.HeaderSize]; input.Position = 0; input.Read(header, 0, MetaInformation.HeaderSize); stream.Write(header); foreach (var chunk in Table.Chunks) { //File.WriteAllBytes($"chunk_{chunk.ChunkGuid}.bin", chunk.DecompressedData); stream.Write(chunk.DecompressedData, 0, chunk.DecompressedData.Length); index++; } stream.Write(MetaInformation.RestOfContent); result = stream.ToArray(); } return(result); }