에서 부모로 인코딩 된 flatbuffer 테이블을 추가 I 다음 flatbuffer 스키마가 있습니다자바
table Image {
...
}
table Pose {
r:[double] (required);
q:[double] (required);
}
table StampedImage {
pose: Pose (required);
image: Image (required);
}
가 나는 flatbuffer 객체를 인코딩하는 방법을 이해합니다.
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));
하지만 내가하고 싶은 것이 :
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();
는 또한, 내가 부모 클래스에 포즈를 "추가"하는 방법을 이해 : 예를 들어, 바이트 배열로 Pose
객체를 인코딩합니다 encodedPose
데이터를 부모 StampedImage
에 직접 추가하는 것입니다. 필자는 하나의 소스에서 인코딩 된 바이트 배열과 다른 소스의 이미지 데이터 (또는 인코딩 된 바이트 배열)를 사용하여 포즈 데이터를받습니다. 그래서 나는이 객체들을 하나의 인코딩 된 객체로 "결합"하고 싶습니다.
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...
}
내가 같은 느낌을 이러한 추가 할당을 피하는 더 좋은 방법이 있어야합니다. 자식이 이미 인코딩 된 경우 부모 개체를 직접 만들 수있는 방법이 있습니까?