2017-12-01 14 views
0

で親にエンコードされたflatbufferテーブルを追加します。たとえば、バイト配列としてPoseオブジェクトをエンコードしますは、私は、次のflatbufferスキーマを持っているJavaの

double[] r = ... 
    double[] q = ... 
    FlatBufferBuilder fbb = new FlatBufferBuilder(); 
    int rvec = Pose.createRVector(fbb, r); 
    int qvec = Pose.createQVector(fbb, q); 
    Pose.startPose(fbb); 
    Pose.addR(fbb, rvec); 
    Pose.addQ(fbb, qvec); 
    Pose.finishPoseBuffer(fbb, Pose.endPose(fbb)); 
    byte[] encodedPose = fbb.sizedByteArray(); 

はさらに、私は、親クラスにポーズを「追加」する方法を理解する:

FlatBufferBuilder fbb = new FlatBufferBuilder(); 

    int rOff = Pose.createRVector(fbb, r); 
    int qOff = Pose.createQVector(fbb, q); 
    Pose.startPose(fbb); 
    Pose.addR(fbb, rOff); 
    Pose.addQ(fbb, qOff); 
    int poseOff = Pose.endPose(fbb); 

    // Create the image 
    int imageOff = ... 

    StampedImage.startStampedImage(fbb); 
    StampedImage.addPose(fbb, poseOff); 
    StampedImage.addImage(fbb, imageOff); 
    fbb.finish(StampedImage.endStampedImage(fbb)); 

しかし、私は何をしたいですencodedPoseデータを親のStampedImageに直接追加することです。私は、コングラメーターをセットアップしています。私は、エンコードされたバイト配列と、別のソース(エンコードされたバイト配列)からの画像データから、あるソースからポーズデータを受け取りました。ですから、これらのオブジェクトを1つのエンコードされたオブジェクトに「結合」できるようにしたいのです。

public byte[] encodeStampedImage(byte[] encodedPose, byte[] encodedImage){ 
    .... ????? 
} 

一つのアプローチオブジェクトをデコードすることであろうし、それらを再エンコードするが、それは巨大なオーバーヘッドだろう:私のような感じ

public byte[] encodeStampedImage(byte[] encodedPose, byte[] encodedImage){ 
    Pose pose = Pose.getRootAsPose( ByteBuffer.wrap(encodedPose)); 
    Image image = Image.getRootAsImage(ByteBuffer.wrap(encodedImage)); 
    // Get r and q vectors from pose, then add them 

    FlatBufferBuilder fbb = new FlatBufferBuilder(); 

    int rOff = Pose.createRVector(fbb, pose.rAsByteBuffer().array()); 
    int qOff = Pose.createRVector(fbb, pose.qAsByteBuffer().array()); 
    // Proceed as before... 
} 

を例えば、関数のシグネチャは次のようになりますこれらの余分な割り当てを避けるためのより良い方法が必要です。子どもがすでにエンコードされている場合、親オブジェクトを直接作成する方法はありませんか?

答えて

1

現在、APIでこれを行う直接的な方法はありません。もちろん、理論的には単純に、子バッファのバイトを親に追加してから、親コンストラクタにオフセットを渡すだけです。しかしそれはFlatBufferBuilderの新しい機能を必要とします。

関連する問題