c++ - 如何在没有数据损坏风险的情况下序列化对象?

标签 c++ named-pipes

我想序列化一个像这样的基本类:

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/

相关文章:

c++ - 浮点比较特定

c++ - 什么面向方面的语言是 c++ 程序员的好起点

C++ raytracer 不将值写入位图

c++ - 返回对象的移动构造函数会破坏 C++98 代码吗?

c# - 在域中设置命名管道安全性

c - C语言的FIFO读取和删除

c++ - 将两个缓冲区合并为 Win32 管道上的单个写入

c++ - 内存泄漏问题

winapi - 命名管道端口号

windows - Windows 上的 CallNamedPipe 线程安全吗