java与c++中的对象序列化 分析。

简介: 有时候我们在开发项目的时候,对于数据的保存 我们通常是直接将数据保存到磁盘上面 ,但是这样操作起来非常的不方便 ,尤其是在大型的项目开发中。  对象的序列化 可以将对象以数据的形式存储到文件中;反之我们也可以从文件中加载一个对象 ,也叫反序列化。

有时候我们在开发项目的时候,对于数据的保存 我们通常是直接将数据保存到磁盘上面 ,但是这样操作起来非常的不方便 ,尤其是在大型的项目开发中。  对象的序列化

可以将对象以数据的形式存储到文件中;反之我们也可以从文件中加载一个对象 ,也叫反序列化。

对于多个数据的操作封装在一起,写入文件,在反序列化的时候我们只需要读取这个对象就可以了  ,我么就不必关心内部数据和方法了 。因为所有数据都包含在对象中。

对象的序列化规则 不同的语言 不一样 ,java中有java的规则 ,c++中有自己的规则 。可以这样理解,他们将一个对象按某种规则转换成与机器指令对应的数据集,然后存储到文件中。反序列化的时候只需要按照规则解密,然后在内存中重构对象。

1、 java中的序列化   。

    支持序列化的类必须实现 Serializable接口  ,这样他才可以被序列化 和反序列化  、。  下面是一个简单那的例子

  Class  A  implements  Serializable        //定义可以序列化的类

  {

    public  int  a  ;

   public A(int x){this.a=a ;}

    public void show()

    {

    System.out.println(a) ;
    }

main方法添加如代码  : 

序列化 :

A  tem=new   A() ;

FileOutputStream fos=new FileOutputStream("d:\\a.txt") ;

ObjectOutputStream oos=new  ObjectOutputStream(fos) ; 

oos.writeObject(tem) ;

反序列化:

FileInputStream fis=new FileInputStream("d:\\a.txt") ;

ObjectInputStream ois=new  ObjectInputStream(fis) ; 

A tem=(A)oos.readObjec()t;

2、

C++下的序列化 :

1、首先序列化的类必须从CObject派生 

2、必须实现CObject的  Serialize 方法    使用CArchive::IsLoading or CArchive::IsStoring来决定是加载还是存储

3、 在类的定义部分添加DECLARE_SERIAL 宏  在实现部分定义IMPLEMENT_SERIAL 宏 

4、CArchive::ReadObject and CArchive::WriteObject  来反序列化或者 序列化对象 

代码如下:

类定义:

class  MyObject :public CObject
{
public:
DECLARE_SERIAL(MyObject)
  void Serialize(CArchive& ar);
void Show() ;
void SetValue(int a,int b) ;
int a ;
int b ;
};
IMPLEMENT_SERIAL(MyObject,CObject,5)
void MyObject::Serialize(CArchive& ar)
{
CObject::Serialize(ar);
if(ar.IsStoring())
  ar<<a<<b;
else
  ar>>b>>a;
}
void MyObject::Show()
{
   CString  str;
   str.Format("%d%d",a,b) ;
   MessageBox(NULL,str,"",MB_OK) ;
}
void MyObject::SetValue(int a,int b)
{  
this->a=a ;
this->b=b ;
}

序列化示例:

     MyObject  obj ;   
  obj.SetValue(1,2) ;
  CFile file("d:\\obj.txt",CFile::modeReadWrite|CFile::modeNoTruncate|CFile::modeCreate); //打开文件
  CArchive arc(&file,CArchive::store) ;  //将CArchive和 CFile类对象关联
  arc.WriteObject(&obj) ; //向文件写入对象

反序列化示例:

MyObject  obj ;   
    CFile file("d:\\obj.txt",CFile::modeRead); //加载文件
CArchive arc(&file,CArchive::load) ;  //定义CArchive和CFile关联
((MyObject*)arc.ReadObject(obj.GetRuntimeClass()))->Show();   //读取序列化对象

目录
相关文章
|
9天前
|
算法 Java C语言
C++和Java中的随机函数你玩明白了吗?内附LeetCode470.rand7()爆改rand10()巨详细题解,带你打败LeetCode%99选手
C++和Java中的随机函数你玩明白了吗?内附LeetCode470.rand7()爆改rand10()巨详细题解,带你打败LeetCode%99选手
|
9天前
|
Java 调度
Java中常见锁的分类及概念分析
Java中常见锁的分类及概念分析
15 0
|
9天前
|
Java
Java中ReentrantLock中tryLock()方法加锁分析
Java中ReentrantLock中tryLock()方法加锁分析
11 0
|
2天前
|
Java
Java中如何克隆一个对象?
【4月更文挑战第13天】
14 0
|
2天前
|
编译器 C++
自从学了C++之后,小雅兰就有对象了!!!(类与对象)(中)——“C++”
自从学了C++之后,小雅兰就有对象了!!!(类与对象)(中)——“C++”
|
2天前
|
存储 编译器 C++
自从学了C++之后,小雅兰就有对象了!!!(类与对象)(上)——“C++”
自从学了C++之后,小雅兰就有对象了!!!(类与对象)(上)——“C++”
|
3天前
|
Java API 数据库
深入解析:使用JPA进行Java对象关系映射的实践与应用
【4月更文挑战第17天】Java Persistence API (JPA) 是Java EE中的ORM规范,简化数据库操作,让开发者以面向对象方式处理数据,提高效率和代码可读性。它定义了Java对象与数据库表的映射,通过@Entity等注解标记实体类,如User类映射到users表。JPA提供持久化上下文和EntityManager,管理对象生命周期,支持Criteria API和JPQL进行数据库查询。同时,JPA包含事务管理功能,保证数据一致性。使用JPA能降低开发复杂性,但需根据项目需求灵活应用,结合框架如Spring Data JPA,进一步提升开发便捷性。
|
4天前
|
C++
【C++成长记】C++入门 | 类和对象(下) |Static成员、 友元
【C++成长记】C++入门 | 类和对象(下) |Static成员、 友元
|
4天前
|
存储 编译器 C++
【C++成长记】C++入门 | 类和对象(中) |拷贝构造函数、赋值运算符重载、const成员函数、 取地址及const取地址操作符重载
【C++成长记】C++入门 | 类和对象(中) |拷贝构造函数、赋值运算符重载、const成员函数、 取地址及const取地址操作符重载
|
7天前
|
存储 Java
Java输入输出:解释一下序列化和反序列化。
Java中的序列化和反序列化是将对象转换为字节流和反之的过程。ObjectOutputStream用于序列化,ObjectInputStream则用于反序列化。示例展示了如何创建一个实现Serializable接口的Person类,并将其序列化到文件,然后从文件反序列化回Person对象。
15 5

热门文章

最新文章