如何读取以某种方式保存的数据?

时间:2021-04-19 16:36:22

标签: c++

我正在学习 C++。 有refecterging_44类的源码。

#include <iostream>
#include <string>

using namespace std;

class refecterging_44 {

public:
refecterging_44() {
    m_1 = "sdgsdg";
    m_2 = 100;
    m_3 = 123123;
    num = sizeof(refecterging_44);
    ptr = &m_1[0];
}
refecterging_44(string name, int score, int id, size_t num, char* ptr) {
    refecterging_44::m_1 = m_1;
    refecterging_44::m_2 = m_2;
    refecterging_44::m_3 = m_3;
    refecterging_44::num = num;
    refecterging_44::ptr = ptr;
}

void write(ostream& os) {
    os.write((char*)this, sizeof(refecterging_44));
    os.write((char*)ptr, num);
}

void read(istream& is) {
    is.read((char*)this, sizeof(refecterging_44));
    is.read((char*)ptr, num);
}

private:
    string m_1;
    int m_2;
    int m_3;
    size_t num;
    char* ptr;

};

'm_1'、'm_2'、'm_3' 只是关于每个数据值的对象样本。 'num'是分配的内存字节,'ptr'是起始内存地址

如果我用 write() 将数据保存在 txt 或其他文件中,我如何在文件中读取这些数据? 无法使用我的 read() 函数读取文件。

当需要更多信息时,我会发表评论。 抱歉我的愚蠢问题。 请理解我的低级解释,因为我的知识是低级的... :(

1 个答案:

答案 0 :(得分:0)

文件是字节流。如果要将数据保存到文件,则需要将文件格式定义为字节流,将数据转换为该格式,然后将该字节流写入文件。您的代码从不这样做。

您的代码所做的只是让计算机在内部存储一个对象并将其存储在一个文件中。这没有帮助,因为它可能包含对当时内存中的其他信息位的引用,而当您尝试读回数据时可能不会。我可能记得“23”是“我种植的房子的街道号码up in”,但这不是将数字 23 传达给其他人的有用方式。您必须编写代码才能转换为已知格式。

这被称为“序列化”,并且有很多很棒的格式和库。

相关问题