java io流與序列化反序列化


 java的io是實現輸入和輸出的基礎,可以方便的實現數據的輸入和輸出操作。

序列化 (Serialization)是將對象的狀態信息轉換為可以存儲或傳輸的形式的過程。在序列化期間,對象將其當前狀態寫入到臨時或持久性存儲區。以后,可以通過從存儲區中讀取或反序列化對象的狀態,重新創建該對象。

下面是一個實例,通過例子來將以上來簡化學習:

1.先創建一個學生類來實現serialization

 1 package com.etc;
 2 
 3 import java.io.Serializable;
 4 
 5 public class Student implements Serializable{
 6     private int id;
 7     private String name;
 8     private char sex;
 9     
10     
11     public Student() {
12         super();
13     }
14     public Student(int id, String name, char sex) {
15         super();
16         this.id = id;
17         this.name = name;
18         this.sex = sex;
19     }
20     public int getId() {
21         return id;
22     }
23     public void setId(int id) {
24         this.id = id;
25     }
26     public String getName() {
27         return name;
28     }
29     public void setName(String name) {
30         this.name = name;
31     }
32     public char getSex() {
33         return sex;
34     }
35     public void setSex(char sex) {
36         this.sex = sex;
37     }
38 
39     public String show() {
40         return "Student [id=" + id + ", name=" + name + ", sex=" + sex + "]";
41     }
42     
43     
44 }
View Code

2.通過控制台將建立的學生對象保存到集合中,序列化集合到文件中,在文件反序列化集合,將學生對象添加到學生集合中,遍歷集合

 1 package com.etc;
 2 
 3 import java.io.BufferedReader;
 4 import java.io.File;
 5 import java.io.FileOutputStream;
 6 import java.io.IOException;
 7 import java.io.InputStreamReader;
 8 import java.io.ObjectOutputStream;
 9 import java.util.ArrayList;
10 import java.util.List;
11 
12 public class 序列化學生集合 {
13     public static void main(String[] args) throws IOException {
14         //創建集合添加學生
15         List<Student> list=new ArrayList<>();
16         //創建控制台輸入流,將文件保存到src/student.dat下
17         ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(new File("src/student.dat")));
18         BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
19         //獲取控制台信息
20         System.out.println("如果錄入信息請輸入‘y’,否則輸入‘n’");
21         String str = br.readLine();
22         boolean flag = true;
23         //循環判斷是否繼續輸入信息
24         while (flag) {
25             Student s = new Student();//實例化一個學生對象
26             //獲取各個信息
27             System.out.println("請輸入學號");
28             String str1 = br.readLine();
29             System.out.println("請輸入姓名");
30             String str2 = br.readLine();
31             System.out.println("請輸入性別");
32             String str3 = br.readLine();
33             //將值傳入到學生對象中
34             s.setId(Integer.parseInt(str1));
35             s.setName(str2);
36             s.setSex(str3.charAt(0));
37             list.add(s);//添加學生到集合中
38             System.out.println("如果錄入信息請輸入‘y’,否則輸入‘n’");
39             String str8 = br.readLine();
40             //判斷是否繼續錄入
41             if (str8.equals("y")) {
42                 flag = true;
43             } else {
44                 flag = false;
45                 System.out.println("錄入結束");
46             }
47         }
48         
49         for (Student student : list) {
50             System.out.println(student.show());
51         }
52         oos.writeObject(list);//將信息寫入文件中
53         oos.close();
54     }
55 }

3.反序列化

 1 package com.etc;
 2 
 3 import java.io.File;
 4 import java.io.FileInputStream;
 5 import java.io.FileNotFoundException;
 6 import java.io.IOException;
 7 import java.io.InputStream;
 8 import java.io.InputStreamReader;
 9 import java.io.ObjectInputStream;
10 import java.util.ArrayList;
11 import java.util.List;
12 
13 public class 反序列化 {
14     public static void main(String[] args) throws IOException, ClassNotFoundException {
15         //創建反序列化集合
16         List<Student> arrayList=new ArrayList<>();
17         //讀文件
18         ObjectInputStream ois=new ObjectInputStream(new FileInputStream(new File("src/student.dat")));
19         //創建集合保存反序列化學生對象
20         ArrayList List=(ArrayList) ois.readObject();
21         
22         //遍歷反序列化集合添加到學生集合中
23         for (Object object : List) {
24             arrayList.add((Student) object);
25         }
26         //遍歷學生集合
27         for (Student student : arrayList) {
28             System.out.println(student.show());
29         }
30         
31     }
32 }

 

反序列化時,一定要想清楚對方傳給自己的是什么信息,例如傳來的集合,就新建集合,來將反序列化信息來保存,再通過集合的類型,來將傳過來的信息進行重組添加到集合中,最后遍歷集合。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM