Pa Rö
Pa Rö

Reputation: 459

serialize and deserialize from flatbuffers to and from bytearray

hi stackoverflow community :)

i want create a flatbuffers object in java which i can serialize to a byte array, and later deserialize back in the java object. i work the first time with flatbuffers and i can't initialised a java object. my way step by step:

  1. write a scheme
  2. compile this with the flatbuffers compiler into a java class
  3. import the flatbuffers class from github
  4. try to build a java object

Here is my code for step 4:

FlatBufferBuilder fbb = new FlatBufferBuilder(1);
int str = fbb.createString("Dummy");
Monster.startPerson(fbb);
Monster.addName(fbb, str);
int p = Person.endPerson(fbb);

Maybe someone can post a simple example to creating a flatbuffers object, and how to serialize and deserialize to and from bytearray?

Hope for an answer and best regards,

Paul

http://google.github.io/flatbuffers/

Upvotes: 4

Views: 12718

Answers (3)

MashiMaro
MashiMaro

Reputation: 69

Serialize

FlatBufferBuilder fbb = new FlatBufferBuilder();
int str = fbb.createString("MyMonster");
Monster.startMonster(fbb);
Monster.addName(fbb, str);
int mon = Monster.endMonster(fbb); 
fbb.finish(mon);   
byte[] data = fbb.sizedByteArray();

Deserialzie

ByteBuffer buff = ByteBuffer.wrap(data);
Monstermonster monster = Monster.getRootAsMonster(buff);
System.out.println(monster.name());

Hope this help.

Upvotes: 4

Volkan Yazıcı
Volkan Yazıcı

Reputation: 1916

Consider you have the following FlatBuffers schema:

table ServiceException {
    message:string;
}

After compiling this schema with flatc to generate Java classes, you can create a ServiceException instance and convert it into a byte[] as follows:

FlatBufferBuilder fbb = new FlatBufferBuilder();
int messagePosition = fbb.createString("something bad happened");
int serviceExceptionPosition = ServiceException.createServiceException(fbb, messagePosition);
fbb.finish(serviceExceptionPosition);
byte[] outputBytes = fbb.sizedByteArray();

Next, you convert the generated outputBytes back into a ServiceException instance:

ByteBuffer inputByteBuffer = ByteBuffer.wrap(outputBytes);
ServiceException serviceException = ServiceException.getRootAsServiceException(inputByteBuffer);

Upvotes: 4

Pa Rö
Pa Rö

Reputation: 459

a answer on the google group page: https://groups.google.com/forum/#!topic/flatbuffers/FZBDMd9m0hE

Upvotes: 5

Related Questions