/// <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)); }