package net.minecraft.nbt; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import java.io.BufferedInputStream; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.DataInput; import java.io.DataInputStream; import java.io.DataOutput; import java.io.DataOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.zip.GZIPInputStream; import java.util.zip.GZIPOutputStream; public class CompressedStreamTools { /** * Load the gzipped compound from the inputstream. */ public static NBTTagCompound readCompressed(InputStream par0InputStream) throws IOException { DataInputStream var1 = new DataInputStream(new BufferedInputStream(new GZIPInputStream(par0InputStream))); NBTTagCompound var2; try { var2 = read(var1); } finally { var1.close(); } return var2; } /** * Write the compound, gzipped, to the outputstream. */ public static void writeCompressed(NBTTagCompound par0NBTTagCompound, OutputStream par1OutputStream) throws IOException { DataOutputStream var2 = new DataOutputStream(new GZIPOutputStream(par1OutputStream)); try { write(par0NBTTagCompound, var2); } finally { var2.close(); } } public static NBTTagCompound decompress(byte[] par0ArrayOfByte) throws IOException { DataInputStream var1 = new DataInputStream(new BufferedInputStream(new GZIPInputStream(new ByteArrayInputStream(par0ArrayOfByte)))); NBTTagCompound var2; try { var2 = read(var1); } finally { var1.close(); } return var2; } public static byte[] compress(NBTTagCompound par0NBTTagCompound) throws IOException { ByteArrayOutputStream var1 = new ByteArrayOutputStream(); DataOutputStream var2 = new DataOutputStream(new GZIPOutputStream(var1)); try { write(par0NBTTagCompound, var2); } finally { var2.close(); } return var1.toByteArray(); } @SideOnly(Side.CLIENT) public static void safeWrite(NBTTagCompound par0NBTTagCompound, File par1File) throws IOException { File var2 = new File(par1File.getAbsolutePath() + "_tmp"); if (var2.exists()) { var2.delete(); } write(par0NBTTagCompound, var2); if (par1File.exists()) { par1File.delete(); } if (par1File.exists()) { throw new IOException("Failed to delete " + par1File); } else { var2.renameTo(par1File); } } /** * Reads from a CompressedStream. */ public static NBTTagCompound read(DataInput par0DataInput) throws IOException { NBTBase var1 = NBTBase.readNamedTag(par0DataInput); if (var1 instanceof NBTTagCompound) { return (NBTTagCompound)var1; } else { throw new IOException("Root tag must be a named compound tag"); } } public static void write(NBTTagCompound par0NBTTagCompound, DataOutput par1DataOutput) throws IOException { NBTBase.writeNamedTag(par0NBTTagCompound, par1DataOutput); } public static void write(NBTTagCompound par0NBTTagCompound, File par1File) throws IOException { DataOutputStream var2 = new DataOutputStream(new FileOutputStream(par1File)); try { write(par0NBTTagCompound, var2); } finally { var2.close(); } } public static NBTTagCompound read(File par0File) throws IOException { if (!par0File.exists()) { return null; } else { DataInputStream var1 = new DataInputStream(new FileInputStream(par0File)); NBTTagCompound var2; try { var2 = read(var1); } finally { var1.close(); } return var2; } } }