我想序列化,然后反序列化FlatBuf对象。
我使用FlatBuffer 1.10.0。我想通过TCP发送串行数据到另一个进程,但此刻我不能反序列化,即使在相同的功能。
该文件FBS:
table StringPacket
{
type:int;
logLevel:int;
myAge:int;
stringdata:string;
}
root_type StringPacket;
在C ++中的代码:
...
uint8_t * packet_data;
int data_size;
using namespace flatbuffers;
FlatBufferBuilder fbb;
//serialize the string data
auto thisStringData = fbb.CreateString(m_stringdata);
//create the packet (I tried thisway too)
//auto packet = CreateStringPacket(fbb, 2, 3, 27, thisStringData);
StringPacketBuilder strbuilder(fbb);
strbuilder.add_logLevel(3);
strbuilder.add_myAge(4);
strbuilder.add_type(1);
strbuilder.add_stringdata(fbb.CreateString("somehing"));
auto thisPacket = strbuilder.Finish();
packet_data = fbb.GetBufferPointer();
data_size = fbb.GetSize();
auto get = GetStringPacket(packet_data);
std::cout << "Deserialized Log level: " << get->logLevel()<<std::endl;
std::cout << "Des Age: " << get->myAge() << std::endl;
...
我得到0000005,访问冲突阅读位置的未处理的异常... 在该行:
std::cout << "Deserialized Log level: " << get->logLevel()<<std::endl;
或任何时候,当我称之为“得到”对象的功能。
我究竟做错了什么?我怎样才能正确地反序列化呢?
请确保您有断言(在“调试”模式)进行测试,因为这已经回答了你的问题。尤其是:
GetBufferPointer
(通常称)。你需要调用fbb.Finish(thisPacket)
或相似。CreateString
(通常称),与您共创它外面一个字符串,你不使用。想必你本来打算叫strbuilder.add_stringdata(thisStringData)
代替。