java对象的序列化

时间:2023-01-02 14:24:02

java对象的序列化

java平台允许我们在内存中创建可复用的java对象,但是一般情况下,只有当JVM处于运行时,这些对象才可能存在 即,这些对象的生命周期不会比JVM的生命抽泣更长,但在现实应用中就可能要求在JVM停止运行之后能够保存指定的对象,并在将来重新读取被保存的对象。java对象序列化能够帮助我们实现该功能。
使用java 对象序列化,在保存对象时,会把其状态保存为一组字节,在未来 再将这些字节组装成对象,必须注意的是对象序列化保存的是对象的转台,即它的成员变量 对象序列化不会关注类中的静态变量

用途

除了在持久化对象时会用到对象序列化之外,当使用RMI(远程方法调用)或在网络中传递对象时,都会用到对象序列化。

如何对java对象进行序列化与反序列化

在java中,只要一个类实现了java.io.serializable接口,那么它就可以被序列化 。

序列化的相关知识

1、在java中只要一个类实现了java.io.serializable接口,那么它就可以被序列化。
2、通过objectOutputStream和objectInputStream
对对象进行序列化与反序列化。
3、虚拟机是否允许反序列化 不仅取决于类路径和功能代码是否一致,两个雷的序列化ID是否一致
4、序列化并不会保存静态变量。
5、要想将父类对象也序列化,就需要让父类实现接口。
6、自定义了writeObject和readObject方法,在使用ObjectOutputStream的writeObject方法和ObjectInputStream的readObject方法时通过反射被调用自定义方法。

transient用法

当持久化对象时,可能有一个特殊的对象数据成员,我们不想用serialization机制来保存它,为了在一个特定对象的一个域上关闭serialization,可以在这个域前加上关键字transient,当对象被序列化时,transient的变量的值不抱愧在序列化的表示中,然而非transient型的变量被包括进去。