前言:有没有想过,如何将对象进行“加密”后写入磁盘?序列化帮你实现!
序列化 ( Serialization )将对象的状态信息转换为可以存储或传输的形式的过程。在序列化期间,对象将其当前状态写入到临时或持久性存储区。以后,可以通过从存储区中读取或反序列化对象的状态,重新创建该对象.
--测试的实体类--
1 package exercise; 2 3 import java.io.Serializable; 4 5 public class Person implements Serializable{ 6 private String name; 7 private int age; 8 9 public Person() { 10 } 11 12 public String getName() { 13 return name; 14 } 15 16 public void setName(String name) { 17 this.name = name; 18 } 19 20 public int getAge() { 21 return age; 22 } 23 24 public void setAge(int age) { 25 this.age = age; 26 } 27 28 public Person(String name, int age) { 29 super(); 30 this.name = name; 31 this.age = age; 32 } 33 34 }
1)单对象序列化
1 package exercise; 2 3 import java.io.FileInputStream; 4 import java.io.FileOutputStream; 5 import java.io.IOException; 6 import java.io.ObjectInputStream; 7 import java.io.ObjectOutputStream; 8 import java.util.ArrayList; 9 import java.util.List; 10 11 12 public class ObjectStreamDemo1 { 13 /** 14 * @param args 15 * @throws IOException 16 * @throws ClassNotFoundException 17 */ 18 19 public final static String PATH = "obj.object1"; 20 21 22 public static void main(String[] args) throws IOException, 23 ClassNotFoundException { 24 //writeObj(); 25 readObj(); 26 System.out.println("--End--"); 27 } 28 29 public static void readObj() throws IOException, ClassNotFoundException { 30 ObjectInputStream ois = new ObjectInputStream(new FileInputStream( 31 PATH)); 32 33 34 Person p = (Person)ois.readObject(); 35 System.out.println(p.getName() + "|" + p.getAge()); 36 37 } 38 39 public static void writeObj() throws IOException { 40 ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream( 41 PATH)); 42 43 oos.writeObject(new Person("张三", 30)); 44 oos.close(); 45 } 46 }
结果显示
2)多对象序列化
1 package exercise; 2 3 import java.io.FileInputStream; 4 import java.io.FileOutputStream; 5 import java.io.IOException; 6 import java.io.ObjectInputStream; 7 import java.io.ObjectOutputStream; 8 import java.util.ArrayList; 9 import java.util.List; 10 11 12 public class ObjectStreamDemo2 { 13 /** 14 * @param args 15 * @throws IOException 16 * @throws ClassNotFoundException 17 */ 18 public final static String PATH = "obj.object"; 19 public static void main(String[] args) throws IOException, 20 ClassNotFoundException { 21 22 //writeObj(); 23 readObj(); 24 System.out.println("---end!---"); 25 } 26 27 public static void readObj() throws IOException, ClassNotFoundException { 28 ObjectInputStream ois = new ObjectInputStream(new FileInputStream( 29 PATH)); 30 31 List<Person> persons = (List<Person>)ois.readObject(); 32 for(Person p:persons){ 33 System.out.println(p.getName() + "|" + p.getAge()); 34 } 35 } 36 37 public static void writeObj() throws IOException { 38 ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream( 39 PATH)); 40 41 List<Person> persons = new ArrayList<Person>(); 42 Person p1 = new Person("张三",18); 43 Person p2 = new Person("李四",19); 44 persons.add(p1); 45 persons.add(p2); 46 oos.writeObject(persons); 47 oos.close(); 48 } 49 }
结果显示
注意:
·实体类必须实现序列化接口“ java.io.Serializable ”
·生成的obj.object 因为是二进制文件,故无法正常打开,若notepad打开也是乱码!
总结:序列化技术在web端技术的应用相当重要,希望学习Java的朋友都能理解该技术并进行应用。