【问题标题】:C++: Saving the class object in archived format which is having char * attributes and read it back from fileC++:以归档格式保存具有 char * 属性的类对象并从文件中读回
【发布时间】:2010-04-19 04:04:40
【问题描述】:

假设我有一堂课

class A
{
 char *attr1,*attr2;
public:
 . . .
};

如何将这个类的对象以二进制格式保存到文件中并读回?

谢谢。

【问题讨论】:

  • @Manjunath:你最后做了什么?请接受其中一个答案。

标签: c++


【解决方案1】:

有关高效、快速和可扩展的二进制序列化格式,请查看Google protocol buffers

【讨论】:

    【解决方案2】:

    阅读有关序列化的信息。例如Boost serialization 库。他们有一个很好的定义:

    在这里,我们使用术语“序列化” 意味着可逆的解构 任意一组 C++ 数据 结构为字节序列。 这样的系统可以用来 重构等效结构 在另一个程序上下文中。取决于 在上下文中,这可能使用 实现对象持久化,远程 参数传递或其他设施。 在这个系统中,我们使用术语 “存档”指的是特定的 这个字节流的渲染。 这可能是一个二进制数据文件, 文本数据、XML 或其他创建的 由该库的用户提供。

    也就是说,这样的解决方案是解决大多数序列化问题的 5 公斤锤。您可能需要更简单的东西。例如,如果您的对象仅包含几个char* 属性,您可以以更简单的方式保存它。但是,如果您的对象将来变得更加复杂,一般的解决方案将允许您灵活处理。

    【讨论】:

    • 我在保存对象时没有任何问题。但是我猜从文件读回有点棘手:)我正在使用:“ofstream outbal("fileName", ios::out | ios::binary);" “outbal.write((char *) &obj, sizeof(classA));”但不知道如何从文件中读回它:(
    • @Manjunath 您正在写出指向字符串的指针,而不是它们指向的字符串。
    • @Manjunath:当然,序列化库为您提供了写入和读取数据的工具!
    【解决方案3】:

    你可能想试试 xml


    你可能想试试 xml,而不是二进制。

    (field=value) 格式也很容易被解析回来。

    http://cppxmlobj.sourceforge.net/

    还可以查看这个 Qustion:

    How to save c++ object into a xml file and restore back?

    祝你好运!!

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多