1、对象序列化包括如下步骤:1) 创建一个对象输出流,它可以包装一个其他类型的目标输出流,如文件输出流;2) 通过对象输出流的writeObject()方法写对象。对象反序列化的步骤如下:1) 创建一个对象输入流,它可以包装一个其他类型的源输入流,如文件输入流;2) 通过对象输入流的readObject()方法读取对象。对象序列化和反序列范例:定义一个Person类,实现Serializable接口复制代码 1 import java.io.Serializable; 2 3 /* 4 * ClassName: Person 5 * Description:测试对象序列化和反序列化 6 * aut
2、hor xudp 7 * version 1.0 V 8 * createTime 2014-6-9 下午02:33:25 9 */10 public class Person implements Serializable 11 12 /*13 * 序列化ID14 */15 private static final long serialVersionUID = -5809782578272943999L;16 private int age;17 private String name;18 private String sex;19 20 public int getAge() 21 r
3、eturn age;22 23 24 public String getName() 25 return name;26 27 28 public String getSex() 29 return sex;30 31 32 public void setAge(int age) 33 this.age = age;34 35 36 public void setName(String name) 37 this.name = name;38 39 40 public void setSex(String sex) 41 this.sex = sex;42 43 序列化和反序列化Person类
4、对象 1 import java.io.File; 2 import java.io.FileInputStream; 3 import java.io.FileNotFoundException; 4 import java.io.FileOutputStream; 5 import java.io.IOException; 6 import java.io.ObjectInputStream; 7 import java.io.ObjectOutputStream; 8 import java.text.MessageFormat; 9 10 /*11 * TestObjSerialize
5、AndDeserialize12 * 测试对象的序列化和反序列13 * author xudp14 * version 1.0 V15 * createTime 2014-6-9 下午03:17:16 */17 public class TestObjSerializeAndDeserialize 18 19 public static void main(String args) throws Exception 20 SerializePerson();/序列化Person对象21 Person p = DeserializePerson();/反序列Perons对象22 System.o
6、ut.println(MessageFormat.format(name=0,age=1,sex=2,23 p.getName(), p.getAge(), p.getSex();24 25 26 /*27 * MethodName: SerializePerson 28 * Description: 序列化Person对象29 * author xudp30 * throws FileNotFoundException31 * throws IOException32 */33 private static void SerializePerson() throws FileNotFound
7、Exception,34 IOException 35 Person person = new Person();36 person.setName(gacl);37 person.setAge(25);38 person.setSex(男39 / ObjectOutputStream 对象输出流,将Person对象存储到E盘的Person.txt文件中,完成对Person对象的序列化操作40 ObjectOutputStream oo = new ObjectOutputStream(new FileOutputStream(41 new File(E:/Person.txt);42 oo.
8、writeObject(person);43 System.out.println(Person对象序列化成功!44 oo.close();45 46 47 /*48 * MethodName: DeserializePerson 49 * Description: 反序列Perons对象50 * author xudp51 * return52 * throws Exception53 * throws IOException54 */55 private static Person DeserializePerson() throws Exception, IOException 56 O
9、bjectInputStream ois = new ObjectInputStream(new FileInputStream(57 new File(58 Person person = (Person) ois.readObject();59 System.out.println(Person对象反序列化成功!60 return person;61 62 63 代码运行结果如下:序列化Person成功后在E盘生成了一个Person.txt文件,而反序列化Person是读取E盘的Person.txt后生成了一个Person对象 三、serialVersionUID的作用serialVers
10、ionUID: 字面意思上是序列化的版本号,凡是实现Serializable接口的类都有一个表示序列化版本标识符的静态变量1 private static final long serialVersionUID实现Serializable接口的类如果类中没有添加serialVersionUID,那么就会出现如下的警告提示用鼠标点击就会弹出生成serialVersionUID的对话框,如下图所示:serialVersionUID有两种生成方式:采用这种方式生成的serialVersionUID是1L,例如:1 private static final long serialVersionUID
11、= 1L;采用这种方式生成的serialVersionUID是根据类名,接口名,方法和属性等来生成的,例如:1 private static final long serialVersionUID = 4603642343377807741L;添加了之后就不会出现那个警告提示了,如下所示:扯了那么多,那么serialVersionUID(序列化版本号)到底有什么用呢,我们用如下的例子来说明一下serialVersionUID的作用,看下面的代码: 8 import java.io.Serializable;10 public class TestSerialversionUID 12 public static void main(String args) throws Exception 13 SerializeCustomer();/ 序列化Customer对象14 Customer customer
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1