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