码迷,mamicode.com
首页 > 编程语言 > 详细

Java序列化笔记

时间:2017-10-09 15:56:23      阅读:209      评论:0      收藏:0      [点我收藏+]

标签:name   tco   col   ble   实现   close   dex   ber   oid   

Java序列化

Java提供了一种对象序列化的机制,该机制中,一个对象可以被表示为一个字节序列, 该字节序列包括该对象的数据、有关对象的类型的信息和存储在对象中数据的类型。

将序列化对象写入文件之后,可以从文件中读取出来,并且对它进行反序列化,也就是说,对象的类型信息、对象的数据,还有对象中的数据类型可以用来在内存中新建对象。

 

类 ObjectInputStream 和 ObjectOutputStream 是高层次的数据流,它们包含序列化和反序列化对象的方法。

 

什么情况下需要序列化

a)当你想把的内存中的对象保存到一个文件中或者数据库中时候;

b)当你想用套接字在网络上传送对象的时候;

c)当你想通过RMI传输对象的时候;

 

序列化ID

序列化 ID 在 Eclipse 下提供了两种生成策略,一个是固定的 1L,一个是随机生成一个不重复的 long 类型数据(实际上是使用 JDK 工具生成),在这里有一个建议,如果没有特殊需求,就是用默认的 1L 就可以,这样可以确保代码一致时反序列化成功。这也可能是造成序列化和反序列化失败的原因,因为不同的序列化id之间不能进行序列化和反序列化。

 

注意:

该类必须实现 java.io.Serializable 对象。

该类的所有属性必须是可序列化的。如果有一个属性不是可序列化的,则该属性必须注明是短暂的。

 

总结:

a)当一个父类实现序列化,子类自动实现序列化,不需要显式实现Serializable接口;

b)当一个对象的实例变量引用其他对象,序列化该对象时也把引用对象进行序列化;

c) static,transient后的变量不能被序列化;

 

实例展示:

public class SerializationTest {

 

public static void main(String[] args) {

Employee employee = new Employee("Brook", "Shenyang", 99, 100506);

final String filePath = "/tmp/employee.ser";

//序列化

try {

FileOutputStream outputStream = new FileOutputStream(filePath);

ObjectOutputStream objStream = new ObjectOutputStream(outputStream);

objStream.writeObject(employee);

objStream.close();

outputStream.close();

} catch (IOException e) {

e.printStackTrace();

}

 

//反序列化

Employee readEmp = null;

try {

FileInputStream input = new FileInputStream(filePath);

ObjectInputStream objIn = new ObjectInputStream(input);

readEmp = (Employee)objIn.readObject();

input.close();

objIn.close();

} catch (IOException e) {

e.printStackTrace();

return;

} catch (ClassNotFoundException e) {

e.printStackTrace();

return;

}

 

System.out.println("名字: " + readEmp.getName());

System.out.println("编号: " + readEmp.getNumber());

System.out.println("邮编: " + readEmp.postcode());

}

 

}

//输出结果:

名字: Brook

编号: 99

邮编: 0

Java序列化笔记

标签:name   tco   col   ble   实现   close   dex   ber   oid   

原文地址:http://www.cnblogs.com/brook0366/p/7641370.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!