java序列化多次序列化到同一个文件及反序列化的问题

这几天上班看了点java的基础知识点,看到介绍序列化的基本问题是都是以介绍序列化一个和反序列化一个对象为例的,依此就想到了要是序列化一次多个序列化对象,再或者不同时间多次序列化对象怎么做,于是动手试了下,发现了不少问题,由于是小菜搞了好久上网找,才得以解决问题,废话不多说了,下面直接进入正题。
(一).java序列化的基本原理知识
参考转自:http://yuyiming.iteye.com/blog/1277089
该博客里面基本的介绍,这里不过多废话了。
(二).一次序列化多个对象及多次序列化产生的问题
对于一次序列化多个对象的话,就是多次调用writeObject()方法就可以了。然而要注意的一点就是在一次的序列化的过程中(写入文件到关闭文件的过程为一次序列化过程),ObjectOutputStream对象写对象的话,会写入一个header,也就是一次序列化的过程中会在文件开始的地方写入一个Header的信息到文件中,于此在多次序列化的过程中(如序列化一次关闭文件后,可能又需要往文件中序列化其他对象),此时就会继续在文件末尾(本次序列化的开头)写入Header的信息,如此如果进行反序列化的对象的时候会报如下错误java.io.StreamCorruptedException: invalid type code: AC,因为这是头的信息而不是对象的信息,为了解决这个办法,就必须在以后序列化的过程中不写入头文件即可:
解决方法:(详细见博客转自http://blog.sina.com.cn/s/blog_6145ed810100z143.html)
1.用同一个ObjectOutputStream写对象
2.但是大部分时候,要不断往某个文件记录对象,这样按照1的说法就要维护一个ObjectOutputStream,但是重启应用时候就会重新创建一个ObjectOutputStream对象,此时如果还是想往刚才那个文件里写对象的话,就会追加一个header。这样在读对象时读到这个位置就会报错。
解决方法是重写ObjectOutputStream的writeStreamHeader()方法
(三).多次序列化多个对象时的解决方法
上面解决了多次序列化的问题,为此我们发现他们在发序列化对象的时候,必须要知道序列化了多少 个对象,然后才能循环多少次把对象取出来,这样显然不是很方便,如果我文件和程序关闭了,我下次要是又想反的时候,怎么才知道以前序列化了多少个对象呢?为此我们通过如下的方法来解决,因为在readObject()的时候,每次
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值