2

こんにちはstackoverflowコミュニティ:)

Java で flatbuffers オブジェクトを作成してバイト配列にシリアル化し、後で Java オブジェクトに逆シリアル化したい。初めてフラットバッファを使用しましたが、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 オブジェクトを作成する簡単な例と、bytearray との間でシリアル化および逆シリアル化する方法を投稿できますか?

回答をお待ちしております。よろしくお願いします。

ポール

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

4

3 に答える 3

5

Google グループ ページの回答: 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();

Deserialzie

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

この助けを願っています。

于 2015-11-05T15:31:44.467 に答える