Java序列化与反序列化
序列化的意义?
序列化可以保存内存中的对象,并且可以重新读出来。当需要用套接字在网络上传输对象的时候可以用序列化,当需要把对象保存到文件或者数据库中的时候可以用序列化。
Java如何将对象序列化,以及如何进行反序列化呢?看如下代码。
1 //下面是要保存的对象对应的类 2 //java.io.NotSerializableException: com.cskaoyan.serial.Student 3 //表示该类不能序列化 4 //并不是任何类都支持序列化,如果需要该类可以序列化,则应该让他自己增加序列化的功能 5 6 //Exception in thread "main" java.io.InvalidClassException: 7 /*com.cskaoyan.serial.Student; 8 local class incompatible: stream classdesc serialVersionUID = 209512936453524119, 9 local class serialVersionUID = -9099220194939822442*/ 10 11 public class Student implements Serializable {//不需要你实现任何抽象方法的接口,标记接口 12 private String name ; 13 public int age; 14 public String gender; 15 16 public String getName() { 17 return name; 18 } 19 public void setName(String name) { 20 this.name = name; 21 } 22 public int getAge() { 23 return age; 24 } 25 public void setAge(int age) { 26 this.age = age; 27 } 28 public String getGender() { 29 return gender; 30 } 31 public void setGender(String gender) { 32 this.gender = gender; 33 } 34 public Student(String name, int age, String gender) { 35 super(); 36 this.name = name; 37 this.age = age; 38 this.gender = gender; 39 } 40 @Override 41 public String toString() { 42 return "Student [name=" + name + ", age=" + age + ", gender=" + gender + "]"; 43 } 44 45 46 }
1 /** 2 * 3 * 通过在流中使用文件,将对象序列化保存,可以实现对象的持久存储。 4 * 5 * 序列化流 6 ObjectOutputStream 7 本质上也是一个字节输出流 。 8 ObjectOutputStream 将 Java 对象 写入 OutputStream。 9 10 void writeObject(Object obj) 11 将指定的对象写入 ObjectOutputStream。 12 13 14 反序列化流 15 ObjectInputStream 16 可以使用 ObjectInputStream 读取对象。 17 * ObjectInputStream 对以前使用 ObjectOutputStream 写入的基本数据和对象进行反序列化。 18 * @author Lan 19 * 20 */ 21 22 public class SerialDemo { 23 24 public static void main(String[] args) throws IOException, ClassNotFoundException { 25 // TODO Auto-generated method stub 26 27 //需要outputSteam初始化 28 //序列化 29 /* FileOutputStream fos= new FileOutputStream("1.txt"); 30 ObjectOutputStream objectOutputStream = new ObjectOutputStream(fos); //无参 访问权限受限 31 32 Student s1=new Student("张三", 50, "female"); 33 34 s1.setName("李四"); 35 objectOutputStream.writeObject(s1); 36 37 objectOutputStream.close();*/ 38 39 //反序列化 40 41 ObjectInputStream objectInputStream= new ObjectInputStream(new FileInputStream("1.txt")); 42 43 Object readObject = objectInputStream.readObject();//说明此处返回的是Student的实例 44 45 System.out.println("SerialDemo.main()"+readObject); 46 } 47 48 }
原创作品,转载请注明出处!