IO流之对象输入输出流的序列化和反序列化

今天,我看到IO对象输入输出流序列化和反序列的时候,遇到了一点问题,现在把它记录下来。

序列化,类似于存档,也就是把对象写到文档上面去。

反序列化,类似于读档,也就是把对象从文档上读出来。

ObjectOutputStream序列化

我们先写一个Person类

IO流之对象输入输出流的序列化和反序列化_第1张图片

在写这个Person类的时候,需要注意一定要实现Serializable这个接口

如果不实现这个接口,在下面序列化的过程中,就会报错

这个接口里面没有方法,实现这个接口的目的是为了说明这个类是可以被序列化的

接下来,我们进行序列化

IO流之对象输入输出流的序列化和反序列化_第2张图片

在主方法里序列化这两个对象

接着我们保存运行一下,看看c.txt

发现文档里面是一堆看不懂的乱码,没关系,我们只需要能正常读出来就可以了

ObjectInputStream反序列化

然后我们就可以进行反序列化,读出刚刚的文档里面对象啦

IO流之对象输入输出流的序列化和反序列化_第3张图片

注意注意,如果刚刚我们在Person类里面没有重写toString方法,那么我们在输出p1和p2的时候,就会打印对象的内存地址,此时可以用get方法进行获取打印

另外还有一个注意点,要进行Person的强转!!!输出的是Object对象!!!

升级

如果对象比较少的情况下,使用上面的方法还是很方便的,但是如果对象多,那么你反序列化一次就写一行代码,就很不方便,而且还需要记住一共存入了多少个对象。下面的方法,是把读到的对象全部存在list集合中,然后将对象一次全部写出即可

IO流之对象输入输出流的序列化和反序列化_第4张图片

IO流之对象输入输出流的序列化和反序列化_第5张图片

OK,这篇文章红色标注的都是易错点注意点,有错误欢迎评论指出

你可能感兴趣的:(JavaSE)