-
什么是java系列化
为了对象能够在網络间传输(如rpc,rmi等)将对象转换为二进制流的过程称为序列化。同样的将二进制流转换为对象的过程称为反序列化。 - Java系列化的几种方法
-
这是大家最常见的一种也是最简单的一种方式,该接口没有任何方法实现了该接口的对象可以直接使用ObjectOutputSteam的writeObject方法写到流里面,然后調用ObjectInputStream的readObject方法将其读出来这里因为大家都知道也熟悉,我就不贴代码了主要看下面两种方式。 首先我们看下该接口的结构
这个接口里面方法方别对应的是写对象到流的writeExternal和从流中读对象的readExternal方法,这个相比直接Serializable实现而言这里可以控制更多的细节,比如你可以将一个transient字段也保存起来下面看代码
这里有两点需要大家注意
2.1第一种和下面的第三种方式读对象的时候是都不会调用构造器,而这种方式会调用构造器所以必须要要有一个默认的构造器
2.2读和写的顺序必须要一致,否则会出现前后值对不上的问题第三种同样存在
这个方式其实和第二种方式有点类似的,都可以控制细节并且也会产生顺序问题,而且defalutRead和defaultWrite(自动处理非transient字段)也可以换成我们的普通read和write同样也能完成工作这裏和第二点不同的就是这里不会调用构造器。
-
其实认真看ASCII码虽然有点乱码,但是不能猜出其实它存的就是对象的信息包括属于哪个类,每个字段的值等(个人猜测还未验证)
- 同一对象使用同一输入流调用两次write后,后面读两次的话读的对象也是同一个,可以用上面的額随便一个demo测试同一对象使用同一输入流调用两次write后后面读两次的话,读的对象也是同一个可以用上面的随便一个demo测试