一天一个Java基础——序列化
2016-04-04 14:10
651 查看
1.概念
Java的“对象序列化”能将一个实现了Serializable接口的对象转换成一组byte,这样日后要用这个对象的时候,能把这些byte数据恢复出来,并据此重新构建那个对象。对象序列化能实现“轻量级persistence(lightweight persistence)”。所谓persistence,是指对象的生命周期不是由程序是否运行决定的,在程序的两次调用之间对象仍然还活着。通过“将做过序列化处理的对象写入磁盘,等到程序再次运行的时候再把它读出来”,可以达到persistence的效果。
之所以要在语言里加入对象序列化,是因为要用它来实现两个重要的功能:
1.Java的远程方法调用能像调用自己机器上的对象那样去调用其它机器上的对象。
2.对JavaBean来说,Bean的状态信息通常是在设计时配置的,这些状态信息必须保存起来,供程序启动的时候用,对象序列化就负责这个工作。
对象序列化不仅能保存对象的副本,而且还会跟着对象中的reference把它所引用的对象也保存起来,然后再继续跟踪那些对象的reference。
2.实现序列化
(1)序列化一个对象只要让它实现Serializable接口就行了(这是一个“标记接口”,tagging interface,没有任何方法)。(2)要想序列化对象,必须先创建一个OutputStream,然后把它嵌进ObjectOutputStream。这是就能用writeObject()方法把对象写入OutputStream。
(3)读的时候需要把InputStream嵌到ObjectInputStream中,然后再调用readObject()方法。
3.样例
package Entity; import java.io.Serializable; public class Department implements Serializable{ private static final long serialVersionUID = -6913084898834515327L; public int id; public String name; public String toString() { return "Department [id=" + id + ", name=" + name + "]"; } }
Department.java
package Test; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import Entity.Department; import Entity.Employee; public class test1 { /** * 序列化对象 */ @org.junit.Test public void SerializeDemo() { Employee e = new Employee(); e.name = "Reyan Ali"; e.address = "Phokka Kuan, Ambehta Peer"; e.SSN = 11122333; e.number = 101; Department d = new Department(); d.id = 1; d.name = "Java研发"; e.department = d; try { System.out.println(e); FileOutputStream fileOut = new FileOutputStream(new File("/Users/zhengbinMac/employee.txt")); ObjectOutputStream out = new ObjectOutputStream(fileOut); System.out.println(e); out.writeObject(e); out.close(); fileOut.close(); System.out.printf("Serialized data is saved in /Users/zhengbinMac/employee.txt"); } catch (IOException i) { i.printStackTrace(); } } /** * 反序列化对象 */ @org.junit.Test public void DeserializeDemo() { Employee e = null; try { FileInputStream fileIn = new FileInputStream("/Users/zhengbinMac/employee.txt"); ObjectInputStream in = new ObjectInputStream(fileIn); e = (Employee) in.readObject(); in.close(); fileIn.close(); } catch (IOException i) { i.printStackTrace(); return; } catch (ClassNotFoundException c) { System.out.println("Employee class not found"); c.printStackTrace(); return; } System.out.println("Deserialized Employee..."); System.out.println("Name: " + e.name); System.out.println("Address: " + e.address); System.out.println("SSN: " + e.SSN); System.out.println("Number: " + e.number); System.out.println("Department: " + e.department); } }
相关博文:
http://www.cnblogs.com/lanxuezaipiao/p/3369962.html
相关文章推荐
- java版复利计算
- Java对象的引用方式(强引用, 软引用, 弱引用, 虚引用)
- java 设计模式------1、策略模式
- java虚拟机学习之内存管理
- JDK7 提供了 7 个阻塞队列
- Java并发编程系列之十三:生产者-消费者模式
- javabean总结
- 学习javaEE每一天2016.4.3
- Spring mvc 配置详解
- Spring MVC 知识点集合
- Java集合框架里ArrayList Vector和LinkedList的区别
- MyEclipse设置自动提示
- Java复习笔记---小随笔---匿名内部类
- java多线程学习(二)
- java集合:ArrayList,Vector, LinkedList的存储性能和特性
- SpringMVC集成Hessian
- java集合:ArrayList和Vector的区别
- 前几天用AnnotationSessionFactoryBean 注解方式代替*.hbm.xml时扫描映射实休文件后报错
- Java邮件发送
- Java的native方法