序列化是什么?
序列化就是指对象通过写出描述自己状态的数值来记录自己的过程,即将对象表示成一系列有序字节(二进制文件),反序列化是将顺序倒过来,从有序的字节中表示成原来的对象
序列化的用途?
序列化在开发中经常用到,主要的应用场景在网络传输和文件IO流得写入和写出,网络传输上,客户端将对象序列化为二进制字节然后传输到服务器,服务器反序列化为对象,进行逻辑处理。
java实现得序列化机制的原理:
java提供了将对象写入流和从流中恢复对象的方法。对象能包含其它的对象,而其它的对象又可以包含另外的对象。对于一个对象的简单域,writeObject()直接将其值写入流中。当遇到一个对象域时,writeObject()被再次调用,如果这个对象内嵌另一个对象,那么,writeObject()又被调用,直到对象能被直接写入流为止。程序员所需要做的是将对象传入ObjectOutputStream的writeObject()方法,剩下的将有系统自动完成。
java实现得序列化的具体步骤:
- 实现Serializable接口
- ObjectInputStream : 表示读取指定的字节数据转换成对象
- ObjectOutputStream :
序列化机制的常见问题:
serialVersionUID的作用
保证序列化和反序列化的对象是一致的,一面错误异常。
静态变量的序列化
序列化并不保存静态变量的状态
Transient关键字
transient关键字表示指定属性不参与序列化
父子类问题
如果父类没有实现序列化,而子类实现列序列化。那么父类中的成员没办法做序列化操作
序列化的存储规则
对同一个对象进行多次写入,打印出的第一次存储结果和第二次存储结果,只多了5个字节的引用关系。
并不会导致文件累加