从flatbuffers到bytearray的序列化和反序列化

时间:2014-10-20 15:27:32

标签: java serialization flatbuffers

stackoverflow社区:)

我想在java中创建一个flatbuffers对象,我可以将其序列化为一个字节数组, 然后在java对象中反序列化。我第一次使用flatbuffers工作 我无法初始化一个java对象。我的方法一步一步:

  1. 写一个方案
  2. 使用flatbuffers编译器将其编译为java类
  3. 从github
  4. 导入flatbuffers类
  5. 尝试构建一个java对象
  6. 以下是我的第4步代码:

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

    也许有人可以发布一个简单的例子来创建一个flatbuffers对象,以及如何序列化和反序列化到bytearray中?

    希望得到答复和最好的问候,

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

3 个答案:

答案 0 :(得分:3)

答案 1 :(得分:1)

考虑您有以下FlatBuffers架构:

table ServiceException {
    message:string;
}

在使用flatc编译此模式以生成Java类之后,您可以创建一个ServiceException实例并将其转换为byte[],如下所示:

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

接下来,将生成的outputBytes转换回ServiceException实例:

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

答案 2 :(得分:0)

序列化

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());

希望得到这个帮助。