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