首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Java中向父级添加编码的平面缓冲表

在Java中向父级添加编码的平面缓冲表
EN

Stack Overflow用户
提问于 2017-12-01 14:27:54
回答 1查看 247关注 0票数 0

我有以下平面缓冲区模式:

代码语言:javascript
复制
table Image {
    ...
}    

table Pose {
    r:[double] (required);
    q:[double] (required);
}

table StampedImage {
    pose: Pose (required);
    image: Image (required);
}

我知道如何编码平面缓冲区对象。例如,要将Pose对象编码为字节数组:

代码语言:javascript
复制
    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();

此外,我理解如何在父类中“添加”一个姿势:

代码语言:javascript
复制
    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中。我的用例是我要建立一个集团化公司..。我从一个源接收位姿数据作为编码字节数组,从另一个源接收图像数据(也是编码字节数组)。因此,我希望能够将这些对象“组合”成一个编码的对象。例如,函数签名如下所示:

代码语言:javascript
复制
public byte[] encodeStampedImage( byte[] encodedPose, byte[] encodedImage ){
    .... ?????
}

一种方法是对对象进行解码,然后对它们重新编码,但这将带来巨大的开销:

代码语言:javascript
复制
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... 
}

我觉得一定有更好的方法来避免这些额外的拨款。如果已经对子对象进行了编码,那么有什么方法可以直接从它们创建父对象吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-12-01 20:51:17

目前在API中没有直接的方法来做到这一点。这当然是可能的,理论上也很简单:您只需将子缓冲区的字节添加到父函数中,然后将偏移量传递给父构造函数。不过,这需要在FlatBufferBuilder中添加一个新函数。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47595534

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档