我有一个简单的类,其中包含一个动态分配的数组,我需要对其进行序列化,以便将其存储在二进制文件中。由于数组的原因,我不能使用 sizeof(MyClass) 来简单地分配缓冲区。
该类如下所示:
class ReplayFrame
{
public:
// ...
private:
int dataType_;
int timeStamp_;
int frameNumber_;
size_t dataSize_;
char* data_;
};
这是我想出的一个解决方案:
std::ostream& operator<< (std::ostream& out, const ReplayFrame& frame)
{
out.write((char *) &frame.dataType_, sizeof(int));
out.write((char *) &frame.timeStamp_, sizeof(int));
out.write((char *) &frame.frameNumber_, sizeof(int));
out.write((char *) &frame.dataSize_, sizeof(size_t));
out.write(frame.data_, frame.dataSize_);
return out;
}
这对我来说似乎很好,但它在某种程度上改变了 << 运算符的含义。所以也许类似的东西std::ostream& ReplayFrame::serialize(std::ostream& out, const ReplayFrame& frame)
会更好?
或者也许我应该有一个serialize()
不使用流的方法,而是返回大小和指向序列化对象的指针,然后我自己编写,比如:
ReplayFrame replayFrame;
int size;
char *frameSerialized = replayFrame.serialize(size);
fileStream.write(frameSerialized, size);
delete frameSerialized; // or frameSerialized.release() ?
正如你所看到的,我很困惑,所以我愿意接受任何好的建议。(注意:我使用 Qt,没有 boost,也没有 c++11)。