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

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));
}
请问如何保存多个对象和读取这些数据?
还有就是如何判断已经读完文件?
...全文
15 6 点赞 打赏 收藏 举报
写回复
6 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
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
多谢了,有些头绪.
  • 打赏
  • 举报
回复
相关推荐
发帖
C++ 语言
加入

6.0w+

社区成员

C++ 语言相关问题讨论,技术干货分享,前沿动态等
申请成为版主
帖子事件
创建了帖子
2004-05-08 07:33
社区公告
暂无公告