예제 #1
0
        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++;
            }
        }
예제 #2
0
        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);
        }