c++ - 读写类对象到二进制文件

标签 c++ serialization file-io binary-data

我想知道当我写的时候会发生什么:

object.write((char*)&class_object, sizeof(class_object));
// or
object.read((char*)&class_object, sizeof(class_object));

到目前为止,根据我的阅读,class_object 已转换为指针。但我不知道它是如何设法将对象携带的数据转换成二进制的。二进制实际上代表什么?

我是初学者。

编辑

你能解释一下当我们写上面这段代码时到底发生了什么吗?我的意思是,当我们写 (char*)*S 时实际发生了什么,说 S 是我声明的类的对象?

最佳答案

这样想象,如果将类转换为 char 指针,则类实例只是 RAM 中的一些内存块:

SomeClass someClassInstance;
char* data = reinterpret_cast<char*>(&someClassInstance);

它将指向您内存中的相同数据,但在您的程序中它将被视为字节数组。

如果你把它转换回来:

SomeClass* instance = reinterpret_cast<SomeClass*>(data);

它又会被当作类来对待。

因此,为了将您的类写入文件并稍后重建它,您只需将 data 写入某个文件,该文件的大小为 sizeof(SomeClass)然后读取文件并将原始字节转换为类实例。

但是,请记住,您只能在类(class)为 POD 时执行此操作(普通旧数据)!

关于c++ - 读写类对象到二进制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46948604/

相关文章:

.net - 使用嵌入式字典反序​​列化 JSON<string, string>

c++ - interval_map codomain 中的选择

c++ - 我如何将整个类从一个进程发送到另一个进程以避免序列化?

c++ - OpenGL 深度 Spaz 攻击

java - 序列化对象图的一部分

java - 为什么 Jackson 实现 Serializable?

java - 文件删除检测

python - 如何在 Python 中打开文件后释放内存

c++ - boost 多索引私有(private)成员访问

我可以使用 fscanf 将 stdout 作为 FILE 流吗?