关于序列化保存对象和读取.

nightdayss 2004-05-08 07:33:12
在网上看到保存对象的类代码:
class MP3_clip
{
public:
string name;
int bitrate;
bool stereo;
void serialize();
void deserialize();
};

void MP3_clip::serialize()
{
int size=name.size();
ofstream arc("mp3.txt", ios::ate);
arc.write(reinterpret_cast<char *>(&size),sizeof(size));
arc.write(name.c_str(), size+1);
arc.write(reinterpret_cast<char *>(&bitrate), sizeof(bitrate));
arc.write(reinterpret_cast<char *>(&stereo), sizeof(stereo));
}

void MP3_clip::deserialize()
{
ifstream arc("mp3.txt");
int len=0;
char *p=0;
arc.read(reinterpret_cast<char *>(&len), sizeof(len));
p=new char [len+1];
arc.read(p, len+1);
name=p;
delete[] p;
arc.read(reinterpret_cast<char *>(&bitrate),sizeof(bitrate));
arc.read(reinterpret_cast<char *>(&stereo),sizeof(stereo));
}
请问如何保存多个对象和读取这些数据?
还有就是如何判断已经读完文件?
...全文
47 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
nightdayss 2004-05-09
  • 打赏
  • 举报
回复
顶啊,大家过来看看.
freefalcon 2004-05-09
  • 打赏
  • 举报
回复
其实应该修改你的序列化函数
void MP3_clip::serialize(ofstream& os)
{
........
}

void MP3_clip::deserialize(ifstream& is)
{
........
}

流由外部传入,这样多个对象可以连续读写了
另外还可以设计一下文件格式,可以在文件头部保存文件里面对象的数目(以方便读取),MFC就是这样做的,当然它还保存类信息,你可以参考一下MFC中CObject类的Serialize函数

文件末尾的判断这个很容易啊!
sharkhuang 2004-05-09
  • 打赏
  • 举报
回复
不是!是吧非连续 的东西 在类存里面连续
cancer001 2004-05-09
  • 打赏
  • 举报
回复
楼上说得是,序列化无非就是封装了读写!
zhouqingyuan 2004-05-09
  • 打赏
  • 举报
回复
保存多个对象和读取这些数据不就是多来几次serialize()和deserialize()
判断文件读完可以通过deserialize()中的返回值
nightdayss 2004-05-09
  • 打赏
  • 举报
回复
多谢了,有些头绪.

65,187

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧