Ejemplo n.º 1
0
        public static void Dechunk(string finalName, BinaryReader reader, int size)
        {
            using (BinaryWriter writer = new BinaryWriter(File.Open(finalName, FileMode.Create)))
            {
                using (BinaryReader chunkedFileReader = new BinaryReader(new MemoryStream(reader.ReadBytes(size))))
                {
                    while (chunkedFileReader.BaseStream.Position < size)
                    {
                        UInt32 uncompressedSize     = chunkedFileReader.ReadUInt32BE();
                        byte   compressionType      = chunkedFileReader.ReadByte();
                        byte   compressionSignature = chunkedFileReader.ReadByte();
                        UInt16 compressedSize       = chunkedFileReader.ReadUInt16BE();

                        if (compressionType == 0x00)
                        {
                            writer.Write(chunkedFileReader.ReadBytes((int)uncompressedSize));
                        }
                        else if (compressionType == 0x09)
                        {
                            byte[] input  = chunkedFileReader.ReadBytes(compressedSize);
                            byte[] output = new byte[(int)uncompressedSize];
                            int    result = LZ4Handler.LZ4_decompress_safe(input, output, input.Length, (int)uncompressedSize);

                            if (result != uncompressedSize)
                            {
                                throw new ArgumentException();
                            }

                            writer.Write(output);
                        }
                        else if (compressionType == 0x0F)
                        {
                            ZstdNet.Decompressor decompressor = new ZstdNet.Decompressor();
                            byte[] input  = chunkedFileReader.ReadBytes(compressedSize);
                            byte[] output = decompressor.Unwrap(input);
                            writer.Write(output);
                        }
                    }
                }
            }
        }
Ejemplo n.º 2
0
 public int Compress(byte[] inBuffer, byte[] outBuffer, int uncompressedSize)
 {
     return(LZ4Handler.LZ4_compress(inBuffer, outBuffer, uncompressedSize));
 }