打字猴:1.70043899e+09
1700438990 编写高质量代码:改善Java程序的151个建议 [:1700438078]
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 ]  [ 下一页 ]