gpt4 book ai didi

c++ - 我如何序列化一个对象而不会有任何数据损坏的风险?

转载 作者:搜寻专家 更新时间:2023-10-31 01:35:51 27 4
gpt4 key购买 nike

我想连载一个像这样的基本类:

class ProcessData
{
public:
ProcessData();
ProcessData(int processNumber, int threadStatus);
~ProcessData();
int getProcessNumber() const;
void setProcessNumber(int processNumber);
int getThreadStatus() const;
void setThreadStatus(int threadStatus);
private:
int _processNumber;
int _threadStatus;
};

并将其写入命名管道。我使用命名管道是因为我需要我的子进程将数据发送到我的主进程。

我的主进程将读取这个命名管道并取回我的对象​​。

问题是很多进程可以写入命名管道,这可能会导致问题。为了连载这门课,我想我可以这样做:

write(namePipeFileDesriptor, &processDataClass, sizeof(processDataClass)));

你认为这行得通吗,或者除了 boost::serialization 之外还有其他选择吗?

最佳答案

我建议使用 google::protobuf用于序列化和反序列化的库。它高效且快速。

对于您的情况,您只需创建一个 .proto 文件

// File.proto
message ProcessData
{
int32 _processNumber;
int32 _threadStatus;
}

protoc编译器编译后,你会得到“File.pb.h”和“File.pb.cpp”,你必须将它们添加到你自己的项目中。就是这样。现在,您可以使用这些源文件中提供的各种方法简单地序列化和反序列化所需的数据。

另一个额外的优势是,相同的“File.proto”可用于其他语言,如 Go、Phython、Java、C#...,因为消息以独立于语言的方式[反]序列化。

关于c++ - 我如何序列化一个对象而不会有任何数据损坏的风险?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36647797/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com