类和结构的内部存储

时间:2012-01-23 23:26:32

标签: c++ memory object-persistence

我想使用指针magikry来保存C ++类,使用以下方法将字节数据写入文件:

result Osp::Io::File::Write (const void *buffer, int length);
  • 参数:

    • buffer - 指向用户提供的缓冲区的指针,该缓冲区包含要写入的字节数据
    • length - 缓冲区长度(以字节为单位)
  • 例外:

    • E_SUCCESS - 方法成功。
    • E_INVALID_STATE - 该文件尚未打开。
    • E_ILLEGAL_ACCESS - 文件未针对写入操作打开,或者由于权限不足而拒绝访问。
    • E_INVALID_ARG - 出现以下任一情况:
      • 指定的缓冲区包含空指针。
      • 指定的缓冲区长度等于或小于0.
      • 文件句柄无效(文件被其他方法关闭,或者内存已损坏)。
    • E_STORAGE_FULL - 磁盘空间已满。
    • E_IO - 由于媒体突然弹出或检测到文件损坏,导致意外的设备故障。

我宁愿不假设会有任何类型的缓冲,虽然我相信每个字节都不会重写整块闪存,但我想知道是否有一种更快的方式来编写所有的一个类的数据字段(没有别的,例如静态字段),例如,指向对象的指针(*this)?

1 个答案:

答案 0 :(得分:2)

在C ++中,您不会将“原始”对象写入文件,而是序列化它们。没有魔力,您需要自己编写序列化代码(为方便起见,重载运算符<<>>。)

你可以通过转储内存来实现旧的C风格,但除了C通常会导致的问题(在系统之间传输数据时出现对齐,字节序问题),你也会遇到C ++引入的问题(内部类表示,可能的“隐藏”数据成员,如v表等。)

如果您想确保读取和写入可在不同系统和/或不同软件之间传输的可靠数据,您最好实现序列化,而不是寻找快捷方式。

您可以使用Boost.Serialization之类的库。