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
                              };
                    }
                }
            }
        }
示例#2
0
        /// <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();
            }
        }
示例#3
0
        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.")
                      {
                      };
            }
        }
示例#4
0
        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();
                }
            }
        }