小编use*_*746的帖子

协议缓冲区:如何将多个消息序列化和反序列化为文件(C ++)?

我是Protocol Buffers和c ++的新手,但我的任务要求我同时使用两者。我想多次将数据(消息)的结构写入单个文件,并能够读取数据。我可以读写一条消息,但事实证明多条消息很难。我已经寻找了几个小时的答案,但似乎无法将数据作为结构读取。任何示例代码或指针将非常有帮助。

这是我的结构的格式:

    typedef struct Entry
       {
          char  name[ NAME_MAX];
          int   id;
          int   age;
          char  DoB[32]; 
       } entry;
Run Code Online (Sandbox Code Playgroud)

这就是我一直用来写入文件的内容:

    Person_File file;
    fstream output("file", ios::out | ios::trunc | ios::binary);
    file.SerializeToOstream(&output);
Run Code Online (Sandbox Code Playgroud)

我试图将文件编辑选项更改为追加而不是截断,但这不能让我以所需的格式读取数据。

这是我用来阅读的内容:

    fstream input("file", ios::in | ios::binary);
    file.ParseFromIstream(&input);
Run Code Online (Sandbox Code Playgroud)

这些是我的.proto文件的内容:

    message Person {


message File {
    required string pname =1;
    required int32 id =2;
    required int32 age =3;
    required string DoB =4;
}

repeated File file =1;
Run Code Online (Sandbox Code Playgroud)

}

从我完成的所有搜索中,似乎CodedInputStream / CodedOutputStream是我最好的选择,但我无法找到任何详细的示例或解释来帮助我理解。我了解协议缓冲区不是自定界的,这可能就是为什么我无法以原始格式读回消息的原因。任何帮助,将不胜感激。谢谢

编辑:我已尝试根据收到的消息使用CodedOutputStream,但似乎未在文件中写入任何内容。

    int fd = open("file.txt",O_WRONLY | O_APPEND | O_CREAT);

    FileOutputStream* …
Run Code Online (Sandbox Code Playgroud)

c++ structure protocol-buffers

4
推荐指数
1
解决办法
6453
查看次数

标签 统计

c++ ×1

protocol-buffers ×1

structure ×1