java 序列化 Serializable 与 反序列化 总结
来源:互联网 发布:酒店前台软件系统 编辑:程序博客网 时间:2024/05/01 16:06
一 、 默认的序列化
一个对象 要能被 序列化,那么他的 类 必须 实现 implements Serializable 接口。
默认 序列化,只 会 序列化 对象 的 成员变量 (transient 修饰符的 除外)。
即 static的变量、所有的方法 都不会 被 序列化。
如果 类 没有 主动地 写 private static final long serialVersionUID = 100000L; 则 默认序列化 会自动生成 一个UID 。
参见代码:
import java.io.Serializable;public class Student implements Serializable {/** * */private static final long serialVersionUID = 100000L;private String name; private transient String password; private static int count=0; public Student(String name,String password) { System.out.println("调用Student的带参的构造方法"); this.name=name; this.password=password; count++; } public String toString() { return "人数: "+count+" 姓名: "+name+" 密码: "+password; }}package po;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;public class ObjectSerializableTest {/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stubtry{ FileOutputStream fos=new FileOutputStream("testabc.obj");ObjectOutputStream oos=new ObjectOutputStream(fos); Student s1=new Student("张三","12345");Student s2=new Student("王五","54321");System.out.println(s1);System.out.println(s2); oos.writeObject(s1);oos.writeObject(s2); oos.close(); new Student("xyq","ichedan"); FileInputStream fis=new FileInputStream("testabc.obj");ObjectInputStream ois=new ObjectInputStream(fis); Student s3=(Student)ois.readObject();Student s4=(Student)ois.readObject(); System.out.println(s3);System.out.println(s4); ois.close();}catch(IOException e){e.printStackTrace();}catch(ClassNotFoundException e1){e1.printStackTrace();}}}
最终得到的 序列化 后 的文件 如下截图所示:
可见 只序列化了 name属性。
从中可以得出如下结论: 序列化 实际上 保存了以下内容:
1)对象的类型
2)
serialVersionUID 的值3)对象 属性的类型 ( 非 static属性)
4)对象 属性的值 (非 static 属性)
上面程序的 输出结果如下所示:
调用Student的带参的构造方法
调用Student的带参的构造方法
人数: 2 姓名: 张三 密码: 12345
人数: 2 姓名: 王五 密码: 54321
调用Student的带参的构造方法
人数: 3 姓名: 张三 密码: null
人数: 3 姓名: 王五 密码: null
二、也可以 自定义 实现 序列化方法。
这样就可以 精确地 控制 序列化 哪些变量。
参考资料:http://blog.csdn.net/wangzhiqing3/article/details/8392820 java 序列化与 反序列化总结
http://blog.csdn.net/wangzhiqing3/article/details/8392814 控制对象的 序列化与 反序列化
http://www.iteye.com/topic/14707#
- java 序列化 Serializable 与 反序列化 总结
- Serializable 接口与 Java 序列化与反序列化
- Java序列化与反序列化(Serializable)
- JAVA序列化与反序列化基础 Serializable
- Java序列化(Serializable)与反序列化
- Java序列化(Serializable)与反序列化
- Java序列化(Serializable)与反序列化
- Java序列化(Serializable)与反序列化
- Java序列化(Serializable)与反序列化
- java 序列化Serializable与反序列化DeSerializable
- Java序列化与反序列化(Serializable&&Externalizable)
- java Serializable 序列化 反序列化
- 序列化和反序列化C# [Serializable] 与[Serializable()]
- java序列化与反序列化(2)------jdk原生序列化机制Serializable
- Serializable序列化与反序列化编码实例
- Serializable的序列化与反序列化
- 8 Serializable序列化与反序列化
- Serializable的序列化与反序列化
- vi命令简单使用
- JAVA编程思想-第四章 控制执行流程
- listview控件的使用。
- Oracle space layer
- 润乾报表使用json数据源的方法改进
- java 序列化 Serializable 与 反序列化 总结
- SQL语句优化介绍
- ZOJ-3626 Treasure Hunt I 树形DP
- java gc垃圾收集算法
- hdu 2255(KM算法模板)
- Unity插件 暂停场景中的游戏对象
- java学习之旅2
- JQ入门记录
- rac 10g 10.2.0.1升级到10.2.0.5详解