`

java对象序列化过程

    博客分类:
  • J2SE
 
阅读更多

一、

 http://bbs.csdn.net/topics/390300026?page=1

 在做网络传输消息的程序。为了适应不同的平台,我想将对象序列化,后再传输,另一端进行反序列化。
但是这样问题就来了,反序列化的时候,不知道反序列化的类型,而且关于多态对象,更是棘手。而且
如何确保一个对象完成的传输过来。

1、看看protobuf
google开源的库,帮你实现序列化反序列化,跨平台的

 

2、boost:serialize库可以把对象序列成二进制或xml串,然后传给socket,接收方如果是同一语言写的就能反序列,且支持继承,不过被序列的类要加一点代码...被序列的类型可以通过约定的数字符号夹在数据前面.
BOOST这种方法,比较不好用。
你一般是怎么序列化的。在SOCKET流中可能有几个对象。那么怎么反序列化?这是我最纠结的地方。

 

3、一个大类,里面有vector<>,list<>等成员,boost就能序列化,将一个协议封装成一个类,只要在前面加上这个类的类型和长度,然后接收方只要序列化一个类就可以,而不是多个,只要你不是指针对象就可以(据说也能处理)...
我曾将一幅曲线图的数据,打包成链表传递出去,用的就是boost...

 

二、

实体类实现序列化接口,才能存到数据库吗?那为什么。。
@Entity
public class Person {

@Id @GeneratedValue
private Integer id;
private String name;
private Integer age;
------------------------------------------------
可是我这个实体类,没实现序列化那个接口,也能存到数据库,这是为什么呢?
想不通!我是用的注解和hibernate框架弄的!

难道说不实现序列化接口也能保存数据?不应该啊。。

 

1、简单的说:
对象的序列化 是在 对象进行保存和传输的时候 进行的,如果没有序列化,速度和完整性都会收到影响。
而你的实体类 并没有对对象进行保存,只是对对象的成员的值进行保存

2、只是建议对实体类进行序列化
因为些软件要对对象进行保存 如果软件崩溃 可以通过保存的对象信息进行恢复

 

3、对象经常要通过IO进行传送,让你写程序传递对象,你会怎么做?把对象的状态数据用某种格式写入到硬盘,Person->“zxx,male,28,30000”?Person,既然大家都要这么干,并且没有个统一的干法,于是,sun公司就提出一种统一的解决方案,它会把对象变成某个格式进行输入和输出,这种格式对程序员来说是透明(transparent)的,但是,我们的某个类要想能被sun的这种方案处理,必须实现Serializable接口
ObjectOutputStream.writeObject(obj);
Object obj = ObjectInputStream.readObject();
假设两年前我保存了某个类的一个对象,这两年来,我修改该类,删除了某个属性和增加了另外一个属性,两年后,我又去读取那个保存的对象,或有什么结果?未知!sun的jdk就会蒙了。为此,一个解决办法就是在类中增加版本后,每一次类的属性修改,都应该把版本号升级一下,这样,在读取时,比较存储对象时的版本号与当前类的版本号,如果不一致,则直接报版本号不同的错!

 

4、当某个类需要存到文件或者通过网络传输的话就必须实现此接口
否则的话,在你存到文件时或者传输的时候就会报没有实现此接口的异常!

 

5、

分享到:
评论

相关推荐

    介绍Java对象序列化使用基础

    序列化的过程就是对象写入字节流和从字节流中读取对象。...对象序列化功能非常简单、强大,在RMI、Socket、JMS、EJB都有应用。对象序列化问题在网络编程中并不是最激动人心的课题,但却相当重要,具有许多实用意义。

    Java对象的序列化和反序列化实践

     把Java对象转换为字节序列的过程称为对象的序列化。  把字节序列恢复为Java对象的过程称为对象的反序列化。  对象的序列化主要有两种用途:  1)把对象的字节序列地保存到硬盘上,通常存放在一个文件中...

    Java对象序列化使用基础

    所谓对象序列化就是将对象的状态转换成字节流,以后可以通过这些值再生成相同状态的对象。这个过程也可以通过...像RMI、Socket、JMS、EJB它们中的一种,彼此为什么能够传递Java对象,当然都是对象序列化机制的功劳。

    深入探索Java对象的序列化

    Serializable有一个子接口Externalizable,实现Externalizable接口的类可以自行控制对象序列化荷反序列化过程。 一般来说,没有必要自己实现序列化接口,直接交给Java虚拟机是上策。 实现了序列化接口的类,如果...

    Java对象的序列化与反序列化

     Java对象的序列化与反序列化  在Java中,我们可以通过多种方式来创建对象,并且只要对象没有被回收我们都可以复用该对象。但是,我们创建出来的这些Java对象都是存在于JVM的堆内存中的。只有JVM处于运行状态的...

    深入理解Java虚拟机-Java内存区域透彻分析(序列化、反序列化概念及其使用场景+实现序列化的方式+transient关键字)

    序列化是指将Java对象转换为二进制数据的过程,而反序列化是指将二进制数据转换回Java对象的过程。序列化可以将Java对象保存到磁盘中,以便永久保存Java对象。同时,序列化也可以用于网络传输Java对象数据。 使用...

    java对象映射器(基于jackson将Java对象转为json,或者将json转为Java对象)

    答:将JSON解析为Java对象的过程称为 [从JSON反序列化Java对象] 从Java对象生成JSON的过程称为 [序列化Java对象到JSON] 为什么用它? 答:我数据库中的主键是使用雪花算法生成的,就是因为用id的位数太多,导致在...

    Java高级程序设计实战教程第五章-Java序列化机制.pptx

    对象序列化是Java编程中的必备武器 Java高级程序设计实战教程第五章-Java序列化机制全文共15页,当前为第4页。 5.2.2 序列化应用 当你想把内存中的对象状态保存到一个文件中或者数据库中时候; 当你想用套接字在...

    Java序列化的机制和原理

    Java序列化API提供一种处理对象序列化的标准机制。在这里你能学到如何序列化一个对象,什么时候需要序列化以及Java序列化的算法,我们用一个实例来示范序列化以后的字节是如何描述一个对象的信息的。……

    java-Hadoop序列化

     反序列化(Deserialization)是序列化的逆过程。即把字节流转回结构化对象。  Java序列化(java.io.Serializable)  Hadoop序列化的特点  Hadoop的序列化格式:Writable  序列化格式特点:  紧凑:高效...

    java序列化和反序列化,面试必备

    意义:序列化机制允许将实现序列化的Java对象转换为字节序列,并将字节序列保存在磁盘中,或通过网络传输,以达到以后恢复成原来的对象。序列化机制使地对象可以脱离程序的运行而独立存在。 使用场景:所有在网络上...

    java序列化和反序列化

     序列化是将对象状态转换为可保持或传输的格式的过程。与序列化相对的是反序列化,它将流转换为对象。这两个过程结合起来,可以轻松地存储和传输数据。  序列化的二种形式: 1.对象转成xml 2.对象转成二进制文件

    JSMutable:Java中对象序列化的库

    它是由迭戈(Diego)使用MIT许可证创建的Java对象序列化库,该库在主要的序列化方法和对继承jsm.Mutable的类的结构的验证中使用了反射式编程。 对于那些想知道如何使用自反编程的Java框架序列化对象的人,此项目是您...

    java中把对象转化为byte数组的方法.doc

    想要将某个类的对象序列化,必须实现 Serializable 接口。 在 ByteToObject 方法中,我们首先创建了一个 ByteArrayInputStream 对象,并将其与 byte 数组关联。然后,我们创建了一个 ObjectInputStream 对象,并将...

    WEBSphere反序列化漏扫.rar

    序列化是让Java对象脱离Java运行环境的一种手段,可以有效的实现多平台之间的通信、对象持久化存储。 Java 序列化是指把 Java 对象转换为字节序列的过程,便于保存在内存、文件、数据库中,ObjectOutputStream类的...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part2

    第2章 Java对象持久化技术概述  2.1 直接通过JDBC API来持久化实体域对象  2.2 ORM简介  2.2.1 对象-关系映射的概念  2.2.2 ORM中间件的基本使用方法  2.2.3 常用的ORM中间件  2.3 实体域对象的其他持久化模式...

    hessian序列化.pdf

    Hessian为不同的类型的Java对象实现了不同的序列化工具,默认的序列化工具是JavaSerializer。 SerializerFactory中有两个静态map,_staticSerializerMap和_staticDeserializerMap,用来存放类与序列化和反序列化...

    3分钟读阿里Java手册: 序列化

    序列化:将数据对象转换为二进制的过程称之为序列化(Serialization) 反序列化:将二进制流恢复为数据对象称之为反序列化(Deserialization) 序列化方式 Java原生序列化 Java类通过实现Serializable接口实现该类对象的...

    CommonsCollection1反序列化链学习.doc

    CommonsCollection1 反序列化链学习是 Java 反序列化攻击链中的一种,需要具备一定的 Java 基础知识,包括反射基础知识、对象与类的基础知识、反射获取对象过程等。通过学习 CommonsCollection1 反序列化链学习,...

    反序列化失败的原因报告

    序列化和反序列化都是Java中实现对象持久化的一种方式。 Serializable 接口 在 Java 中,实现了 Serializable 接口的类可以被序列化和反序列化。Serializable 接口是一个标记接口,表明该类可以被序列化。实现了 ...

Global site tag (gtag.js) - Google Analytics