java对象序列化和反序列化

来源:互联网 发布:网络映射有什么用 编辑:程序博客网 时间:2024/06/16 00:28

java对象序列化和反序列化


介绍

序列化指的是将内存中的java对象保存到磁盘问价中(字节码保存),反序列化是将磁盘中的文件加载到内存对象中。java对象序列化:将内存中的java对象持久化到磁盘文件中java对象反序列化:将磁盘文件中的字节码文件转为内存中java对象使用备注:需要序列化的对象通常需要实现序列化接口(不管是JDK还是第三方提供的)对象序列化主要功能:1、把对象的字节序列永久地保存到硬盘文件中2、用作网络传输字节序列

Serializable接口说明

Serializability of a class is enabled by the class implementing thejava.io.Serializable interface. Classes that do not implement thisinterface will not have any of their state serialized ordeserialized.  All subtypes of a serializable class are themselvesserializable.  The serialization interface has no methods or fieldsand serves only to identify the semantics of being serializable.Serializable接口是一个标记接口,其内部并没有提供接口方法。每一个是实现了该接口的类都拥有一个版本标识号。serialVersionUID的取值是Java运行时环境根据类的内部细节自动生成的。如果对类的源代码作了修改,再重新编译,新生成的类文件的serialVersionUID的取值有可能也会发生变化。类的serialVersionUID的默认值完全依赖于Java编译器的实现,对于同一个类,用不同的Java编译器编译,有可能会导致不同的 serialVersionUID,也有可能相同。为了提高serialVersionUID的独立性和确定性,强烈建议在一个可序列化类中显示的定义serialVersionUID,为它赋予明确的值。

code 如下

/** *  * @author xuyi * @Time 2016年7月3日 下午8:45:29 * @类名 User * @功能描述: * @春风十里不如你 * @备注: */public class User implements Serializable {    // 实现序列化接口    private static final long serialVersionUID = 1390629548621286444L;    private int userId;    private String info;    //setter和getter方法}

java对象序列化

/** *  * @author xuyi * @Time 2016年7月3日 下午8:45:29 * @类名 User * @功能描述: * @春风十里不如你 * @备注: */public class User implements Serializable {    // 实现序列化接口    private static final long serialVersionUID = 1390629548621286444L;    public transient String transientVlaue = "transientVlaue";//不会被序列化    public volatile String temName = "volatileValue";    public static String name = "staticValue";    private int userId;    private String info;    //总结static和transient修饰的变量不会被序列化    //注意:静态修饰的变量虽然可以被存储到序列化文件中,但是在使用对象    输出流的时候已经不能再修改其值了,因为静态变量是在类加载的时候就已经加载到内存了。}

总结

java对象序列化就是将java对象转为字节序列,通常持久化到磁盘文件中。java对象反序列化就是将字节序列加载到内存转为java对象过程瞬态transient修饰的变量无法被序列化序列化作用:1、对象持久化存储2、对象网络传输

参考

1、http://blog.csdn.net/wangloveall/article/details/7992448/

0 0