1700438991
编写高质量代码:改善Java程序的151个建议 建议11:养成良好习惯,显式声明UID
1700438992
1700438993
我们编写一个实现了Serializable接口(序列化标志接口)的类,Eclipse马上就会给一个黄色警告:需要增加一个Serial Version ID。为什么要增加?它是怎么计算出来的?有什么用?本章就来解释该问题。
1700438994
1700438995
类实现Serializable接口的目的是为了可持久化,比如网络传输或本地存储,为系统的分布和异构部署提供先决支持条件。若没有序列化,现在我们熟悉的远程调用、对象数据库都不可能存在,我们来看一个简单的序列化类:
1700438996
1700438997
public class Person implements Serializable{
1700438998
1700438999
private String name;
1700439000
1700439001
/*name属性的getter/setter方法省略*/
1700439002
1700439003
}
1700439004
1700439005
这是一个简单JavaBean,实现了Serializable接口,可以在网络上传输,也可以本地存储然后读取。这里我们以Java消息服务(Java Message Service)方式传递该对象(即通过网络传递一个对象),定义在消息队列中的数据类型为ObjectMessage,首先定义一个消息的生产者(Producer),代码如下:
1700439006
1700439007
public class Producer{
1700439008
1700439009
public static void main(String[]args)throws Exception{
1700439010
1700439011
Person person=new Person();
1700439012
1700439013
person.setName(“混世魔王”);
1700439014
1700439015
//序列化,保存到磁盘上
1700439016
1700439017
SerializationUtils.writeObject(person);
1700439018
1700439019
}
1700439020
1700439021
}
1700439022
1700439023
这里引入了一个工具类SerializationUtils,其作用是对一个类进行序列化和反序列化,并存储到硬盘上(模拟网络传输),其代码如下:
1700439024
1700439025
public class SerializationUtils{
1700439026
1700439027
private static String FILE_NAME=“c:/obj.bin”;
1700439028
1700439029
//序列化
1700439030
1700439031
public static void writeObject(Serializable s){
1700439032
1700439033
try{
1700439034
1700439035
ObjectOutputStream oos=new ObjectOutputStream(new
1700439036
1700439037
FileOutputStream(FILE_NAME));
1700439038
1700439039
oos.writeObject(s);
[
上一页 ]
[ :1.70043899e+09 ]
[
下一页 ]