为啥序列化, rwp:为了对象的存储 ,不序列化呢,对象存储和传输不了,存储和传输一般基于字符串
字符串默认实现了serializable接口,serilizable接口就作为序列化标识,具体实现是 走的writeObject,只输出value[]不为空的,很多集合的序列化都是这样的,
java的输出流一个类里写了一个defaultWriteObject,所有没有重写writeObject的都走这个默认序列化,立马只针对字符串 和枚举做了特赦,serilizable接口就作为序列化标识,源码是第二张图,默认序列化走ObjectOutputStream的defaultWriteObject
最重要的两个原因是:
1、将对象的状态保存在存储媒体中以便可以在以后重新创建出完全相同的副本;
2、按值将对象从一个应用程序域发送至另一个应用程序域。
实现serializable接口的作用是就是可以把对象存到字节流,然后可以恢复。所以你想如果你的对象没实现序列化怎么才能进行网络传输呢,要网络传输就得转为字节流,所以在分布式应用中,你就得实现序列化,如果你不需要分布式应用,那就没那个必要实现序列化。
序列化的目的是方便传输,速度快,还很安全,被调用方序列化,调用方反序列化即可拿到传输前最原始的java对象,常用于不同进程之间的对象传输;方便存储,不管是存储成文件还是数据库,都行,存储为文件,下回要用可以直接反序列拿到对象
为什么JAVA对象需要实现序列化?
https://www.cnblogs.com/chenmingjun/p/9746310.html
https://blog.csdn.net/so_geili/article/details/78931742
https://baijiahao.baidu.com/s?id=1633305649182361563&wfr=spider&for=pc
https://blog.csdn.net/qq_15037231/article/details/81913194
https://www.cnblogs.com/gw811/archive/2012/10/10/2718331.html
什么情况下会用到序列化?
- 当你想把内存中的对象写入到硬盘时
- 当你想用套接字在网络上传输对象时
- 当你想通过RMI调用对象时
(RMI是什么东西?):RMI总结来说就是远程调用对象,在一个jvm上调用另一个jvm的对象。