Exemplo n.º 1
0
        /// <summary>Reads the content of the given file</summary>
        /// <param name="Filepath">The file to read from</param>
        /// <param name="endianness">The endianness of the nbt structure</param>
        /// <param name="Compression">The compression type used</param>
        /// <returns>Reads the content of the given file</returns>
        public static ITag ReadFile(String Filepath, Endianness endianness, NBTCompression Compression = NBTCompression.Auto)
        {
            Stream Stream = CompressionStream.GetDecompressionStream(new FileStream(Filepath, FileMode.Open, FileAccess.ReadWrite), Compression);
            ITag   Out    = ReadFile(new SerializationContext(endianness, Stream));

            Stream.Close();

            return(Out);
        }
        /// <summary>Writes the given nbtstructure into a file</summary>
        /// <param name="Filepath">The filepath to write to</param>
        /// <param name="Tag">The tag to write</param>
        /// <param name="compression">The compression type to be used</param>
        /// <param name="endianness">The endianness of the nbt structure</param>
        public static void WriteFile(String Filepath, ITag Tag, NBTCompression compression, Endianness endianness)
        {
            var Writer = new FileStream(Filepath, FileMode.Create);

            Stream stream = CompressionStream.GetCompressionStream(Writer, compression);

            Write(Tag, new SerializationContext(endianness, stream));

            stream.Flush();
            stream.Close();
        }
        /// <summary>Checks the given compression tag and creates a compression stream around the given stream</summary>
        /// <param name="stream">The stream to wrap around</param>
        /// <param name="Compression">The compression type to use</param>
        /// <returns>Checks the given compression tag and creates a compression stream around the given stream</returns>
        public static Stream GetCompressionStream(Stream stream, NBTCompression Compression = NBTCompression.Auto)
        {
            switch (Compression)
            {
            case NBTCompression.None:
            default:
                return(stream);

            case NBTCompression.Gzip:
                return(new GZipStream(stream, CompressionLevel.Optimal));

            case NBTCompression.Zlib:
                return(new ZOutputStream(stream, zlibConst.Z_BEST_COMPRESSION));
            }
        }
        /// <summary>Gets a decompression stream from the specified information</summary>
        /// <param name="stream">The stream to wrap around</param>
        /// <param name="Compression">The compression type to use</param>
        /// <returns>Gets a decompression stream from the specified information</returns>
        public static Stream GetDecompressionStream(Stream stream, NBTCompression Compression = NBTCompression.Auto)
        {
            if (Compression == NBTCompression.Auto)
            {
                Compression = DetectCompression(stream);
            }

            switch (Compression)
            {
            default:
                return(stream);

            case NBTCompression.Gzip:
                return(new GZipStream(stream, CompressionMode.Decompress));

            case NBTCompression.Zlib:
                stream.Seek(2, SeekOrigin.Begin);
                return(new DeflateStream(stream, CompressionMode.Decompress, true));
            }
        }
 /// <summary>Gets a decompression stream from the specified information</summary>
 /// <param name="Filepath">File to create a stream from</param>
 /// <param name="Compression">The compression type to use</param>
 /// <returns>Gets a decompression stream from the specified information</returns>
 public static Stream GetDecompressionStream(String Filepath, NBTCompression Compression)
 {
     return(GetDecompressionStream(new FileStream(Filepath, FileMode.Open, FileAccess.Read), Compression));
 }
        /// <summary>Writes the given nbtstructure into a file</summary>
        /// <param name="stream">The stream to write to</param>
        /// <param name="Tag">The tag to write</param>
        /// <param name="compression">The compression type to be used</param>
        /// <param name="endianness">The endianness of the nbt structure</param>
        public static void WriteFile(Stream stream, ITag Tag, NBTCompression compression, Endianness endianness)
        {
            stream = CompressionStream.GetCompressionStream(stream, compression);

            Write(Tag, new SerializationContext(endianness, stream));
        }