序列化是为了方便存贮,减小电脑硬件的读取次数,是为了提高速度,并不能保存数据,当程序关闭和打开时,数据都无法还原的,若要真的保存数据就需要保存到文件中,它可以理解成数据存入文件的中间的一个缓存么?具体怎么实现通过序列化将数据写入文件的?请给出相应代码,最好写上注释......谢谢了

解决方案 »

  1.   

    序列化不是缓冲,而是一种把任意数据转换成线性排列的过程,序列化的过程需要一个载体执行具体的操作,文件是一种典型的持久性线性存储载体,也可以把内存缓冲区作为载体。
    通常情况下,MFC中的序列化需要提供一个CArchiev作为序列化的参数,而这个参数往往跟文件相关联,当然你也可以让它跟别的载体关联。
      

  2.   

    序列化是一个过程,不是缓存,是把CObject(或其派生类)对象中的数据,保存到一个CArchive对象中,或者从一个CArchive对象中读取数据。
    在构造CArchive对象时,需要提供一个CFile类对象,如果该对象打开的是一个文件,就是存取这个文件。具体是储存还是读取,是由CArchive对象指定的。序列化的过程,也就是存取的数据和顺序,是由被序列化的类决定的,调用CArchive类中的读写函数来实现。
      

  3.   

    我能这么理解么:
    序列化需要用到"数据"和"载体",数据就是由CArchive对象提供(之前将数据保存到了CArchive对象中),载体就是构造CArchive对象时提供的那个CFile类对象来决定(如文件).所以调用CObject::Serialize(ar)
      

  4.   

    序列化是为了方便存贮,减小电脑硬件的读取次数,是为了提高速度,并不能保存数据 <- 误导序列化是数据在 内存变量 和 载体 之间进行有序传递的过程载体可以是文件(包括端口,磁盘文件,内存映射文件等等),也可以是流(COM),接口等
    有序传递是一次性的,每一次的序列化操作要么读取全部变量,要么存储全部变量,文件指针的位置从0到文件末尾,是不可逆的过程;同样变量的读取或存储的顺序也是相同且唯一的.如果一个对象提供了一个函数能实现上述功能,则该对象就是可序列化的
      

  5.   

    如果一个对象提供了一个函数能实现上述功能,则该对象就是可序列化的.
    是指CObject::Serialize么?(请问6楼的)
      

  6.   

    那CArchive对象是告诉序列化函数“数据”和“载体”的作用么?
      

  7.   

    CArchive是序列化的一座桥梁,在MFC的默认实现中,它是跟文件绑定的,桥是通向文件的,相当于载体是文件,你能继承这个类来绑定其他类型的载体