java-序列化-001-原生介绍
2017-09-14 00:08
316 查看
一、什么是对象序列化
java平台允许我们在内存中创建可复用的Java对象,但一般情况下,只有当JVM处于运行时,这些对象才可能存在,即,这些对象的生命周期不会比JVM的生命周期更长。但在现实应用中,就可能要求在JVM停止运行之后能够保存(持久化)指定的对象,并在将来重新读取被保存的对象。Java对象序列化就能够帮助我们实现该功能。
使用Java对象序列化,在保存对象时,会把其状态保存为一组字节,在未来,再将这些字节组装成对象。必须注意地是,对象序列化保存的是对象的"状态",即它的成员变量。由此可知,对象序列化不会关注类中的静态变量。
除了在持久化对象时会用到对象序列化之外,当使用RMI(远程方法调用),或在网络中传递对象时,都会用到对象序列化。
将 Java 对象序列化为二进制文件的 Java 序列化技术是 Java 系列技术中一个较为重要的技术点,在大部分情况下,开发人员只需要了解被序列化的类需要实现 Serializable 接口,使用 ObjectInputStream 和 ObjectOutputStream 进行对象的读写。
二、序列化过程原理
需要实现接口:java.io.Serializable
自定义工具类:
View Code
执行SimpleSerial之后会有如下结果:
参看地址:
http://www.blogjava.net/jiangshachina/archive/2012/02/13/369898.html http://blog.csdn.net/jiangwei0910410003/article/details/18989711/
java平台允许我们在内存中创建可复用的Java对象,但一般情况下,只有当JVM处于运行时,这些对象才可能存在,即,这些对象的生命周期不会比JVM的生命周期更长。但在现实应用中,就可能要求在JVM停止运行之后能够保存(持久化)指定的对象,并在将来重新读取被保存的对象。Java对象序列化就能够帮助我们实现该功能。
使用Java对象序列化,在保存对象时,会把其状态保存为一组字节,在未来,再将这些字节组装成对象。必须注意地是,对象序列化保存的是对象的"状态",即它的成员变量。由此可知,对象序列化不会关注类中的静态变量。
除了在持久化对象时会用到对象序列化之外,当使用RMI(远程方法调用),或在网络中传递对象时,都会用到对象序列化。
将 Java 对象序列化为二进制文件的 Java 序列化技术是 Java 系列技术中一个较为重要的技术点,在大部分情况下,开发人员只需要了解被序列化的类需要实现 Serializable 接口,使用 ObjectInputStream 和 ObjectOutputStream 进行对象的读写。
二、序列化过程原理
需要实现接口:java.io.Serializable
自定义工具类:
public class Person implements Externalizable { private String name = null; transient private Integer age = null; private Gender gender = null; public Person() { System.out.println("none-arg constructor"); } public Person(String name, Integer age, Gender gender) { System.out.println("arg constructor"); this.name = name; this.age = age; this.gender = gender; } private void writeObject(ObjectOutputStream out) throws IOException { out.defaultWriteObject(); out.writeInt(age); } private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException { in.defaultReadObject(); age = in.readInt(); } @Override public void writeExternal(ObjectOutput out) throws IOException { out.writeObject(name); out.writeInt(age); } @Override public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException { name = (String) in.readObject(); age = in.readInt(); } }
View Code
执行SimpleSerial之后会有如下结果:
arg constructor none-arg constructor [John, 31, null]
参看地址:
http://www.blogjava.net/jiangshachina/archive/2012/02/13/369898.html http://blog.csdn.net/jiangwei0910410003/article/details/18989711/
相关文章推荐
- java序列化与反序列化(4)------jdk原生序列化机制实现深拷贝
- 10049---java-Transient关键字、Volatile关键字介绍和序列化、反序列化机制、单例类序列化
- java-Transient关键字、Volatile关键字介绍和序列化、反序列化机制、单例类序列化
- Serializable java序列化介绍
- java原生序列化和Kryo序列化性能比较
- 大数据笔记13:Java原生序列化、Avro、RPC与Log4j
- java原生序列化和Kryo(dubbo)序列化性能比较
- java序列化与反序列化(3)------jdk原生序列化机制Externalizable
- 像原生C/C++,序列化Java对象
- java序列化介绍
- JAVA序列化技术-----二进制数据详细介绍
- 序列化框架的使用及性能对比Kryo、Hessian、Protostuff、java原生
- java 中序列化的介绍
- java原生序列化和Kryo序列化性能比较
- 【Java】Java原生的序列化和反序列化
- java 对象的序列化和反序列化详细介绍
- java原生序列化和Kryo序列化性能实例对比分析
- [netty]-消息编解码之Java原生序列化
- java-小技巧-001-Long序列化到前端js不支持
- Java序列化技术性能分析(JDK原生与Protostuff)