2

嗨stackoverflow社区:)

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

  1. 写一个方案
  2. 使用 flatbuffers 编译器将其编译成 java 类
  3. 从 github 导入 flatbuffers 类
  4. 尝试构建一个java对象

这是我的第 4 步代码:

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

也许有人可以发布一个简单的示例来创建一个 flatbuffers 对象,以及如何对字节数组进行序列化和反序列化?

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

保罗

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

4

3 回答 3

5

谷歌群组页面上的答案: https ://groups.google.com/forum/#!topic/flatbuffers/FZBDMd9m0hE

于 2014-10-23T11:02:46.490 回答
2

考虑您有以下 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);
于 2015-11-10T10:05:18.670 回答
1

连载

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

反序列化

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

希望这有帮助。

于 2015-11-05T15:31:44.467 回答