first commit
This commit is contained in:
65
Minecraft.World/NbtIo.cpp
Normal file
65
Minecraft.World/NbtIo.cpp
Normal file
@@ -0,0 +1,65 @@
|
||||
#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);
|
||||
}
|
||||
Reference in New Issue
Block a user