#include "../../Platform/stdafx.h" #include "../Streams/InputOutputStream.h" #include "NbtIO.h" CompoundTag* NbtIo::readCompressed(InputStream* in) { MemSect(26); // 4J - this was using a try/finally block DataInputStream dis = DataInputStream(in); // 4J - was new GZIPInputStream as well CompoundTag* ret = NbtIo::read((DataInput*)&dis); dis.close(); MemSect(0); return ret; } void NbtIo::writeCompressed(CompoundTag* tag, OutputStream* out) { // 4J - this was using a try/finally block // 4J Stu - Buffer output in 1024 byte chunks so that we can allocate // properly in the save file BufferedOutputStream bos = BufferedOutputStream(out, 1024); DataOutputStream dos = DataOutputStream(&bos); // 4J - was new GZIPOutputStream as well NbtIo::write(tag, &dos); dos.close(); } // Reads tags from a stream created from the input buffer. Doesn't free the data // in the source buffer. CompoundTag* NbtIo::decompress(byteArray buffer) { ByteArrayInputStream bais = ByteArrayInputStream(buffer); // 4J - this was using a try/finally block DataInputStream in = DataInputStream(&bais); // 4J - was new GZIPInputStream as well CompoundTag* ret = NbtIo::read((DataInput*)&in); bais.reset(); // This stops the buffer referenced by the input stream from // being freed when it goes out of context in.close(); return ret; } byteArray NbtIo::compress(CompoundTag* tag) { // 4J - this was using a try/finally block ByteArrayOutputStream baos = ByteArrayOutputStream(); DataOutputStream dos = DataOutputStream(&baos); // 4J - was new GZIPOutputStream as well NbtIo::write(tag, &dos); byteArray ret(baos.buf.length); System::arraycopy(baos.buf, 0, &ret, 0, baos.buf.length); dos.close(); return ret; } CompoundTag* NbtIo::read(DataInput* dis) { Tag* tag = Tag::readNamedTag(dis); if (tag->getId() == Tag::TAG_Compound) return (CompoundTag*)tag; if (tag != NULL) delete tag; // Root tag must be a named compound tag return NULL; } void NbtIo::write(CompoundTag* tag, DataOutput* dos) { Tag::writeNamedTag(tag, dos); }