Java序列化与反序列化

Posted 一地鸡毛

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 }

 

以上是关于Java序列化与反序列化的主要内容,如果未能解决你的问题,请参考以下文章

Java序列化与反序列化

Java反序列化漏洞——反射与反序列化基础

Java序列化与反序列化

Java序列化与反序列化

Java序列化与反序列化

Java序列化与反序列化