This code was not tested and breaks in Release builds, reverting to restore
functionality of the nightly. All in-game menus do not work and generating
a world crashes.
This reverts commit a9be52c41a.
65 lines
2.0 KiB
C++
65 lines
2.0 KiB
C++
#include "stdafx.h"
|
|
#include "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);
|
|
} |