数据流:
DataInputStream,DataOutputStream。可以用于与计算机无关的格式读写java的基本数据类型以及String对象
对象流:
ObjectInputStream,ObjectOutputStream.
序列化:保存内存中对象的“全景图”。
为了实现对象序列化,对应的类必须实现Serializable接口。
Serializable接口中没有定义任何的方法,称之为“标记接口”。
如果加上了一个transient修饰符,该属性的值将不被序列化。
反序列化:使用ObjectInputStream类,将字节序列还原成对象的过程。
1 package com.lovo.day2; 2 3 import java.io.IOException; 4 import java.io.Serializable; 5 import java.util.Date; 6 7 public class Student implements Serializable { 8 9 private static final long serialVersionUID = 4282130869653374904L; 10 11 private String name; 12 private int age; 13 private boolean sex; 14 private double money; 15 private Date birth; 16 private Course course; 17 18 public Student(String name, int age, boolean sex, double money, Date birth, 19 Course course) { 20 super(); 21 this.name = name; 22 this.age = age; 23 this.sex = sex; 24 this.money = money; 25 this.birth = birth; 26 this.course = course; 27 } 28 29 public String getName() { 30 return name; 31 } 32 33 public void setName(String name) { 34 this.name = name; 35 } 36 37 public int getAge() { 38 return age; 39 } 40 41 public void setAge(int age) { 42 this.age = age; 43 } 44 45 public boolean isSex() { 46 return sex; 47 } 48 49 public void setSex(boolean sex) { 50 this.sex = sex; 51 } 52 53 public double getMoney() { 54 return money; 55 } 56 57 public void setMoney(double money) { 58 this.money = money; 59 } 60 61 public Date getBirth() { 62 return birth; 63 } 64 65 public void setBirth(Date birth) { 66 this.birth = birth; 67 } 68 69 public Course getCourse() { 70 return course; 71 } 72 73 public void setCourse(Course course) { 74 this.course = course; 75 } 76 77 @Override 78 public String toString() { 79 return "Student [name=" + name + ", age=" + age + ", sex=" + sex 80 + ", money=" + money + ", birth=" + birth + ", course=" 81 + course + "]"; 82 } 83 84 /* private void readObject(java.io.ObjectInputStream in) throws IOException, 85 ClassNotFoundException { 86 System.out.println("读"); 87 this.name = in.readUTF(); 88 this.age = in.readInt(); 89 this.sex = in.readBoolean(); 90 this.course = (Course) in.readObject(); 91 this.money = in.readDouble(); 92 } 93 94 private void writeObject(java.io.ObjectOutputStream out) throws IOException { 95 System.out.println("写"); 96 out.writeUTF(this.name); 97 out.writeInt(this.age); 98 out.writeBoolean(this.sex); 99 out.writeObject(course); 100 out.writeDouble(this.money); 101 } 102 */ 103 }
1 package com.lovo.day2; 2 3 import java.io.Serializable; 4 5 public class Course implements Serializable { 6 7 private static final long serialVersionUID = 1L; 8 9 private int code; 10 private String name; 11 12 public int getCode() { 13 return code; 14 } 15 16 public void setCode(int code) { 17 this.code = code; 18 } 19 20 public String getName() { 21 return name; 22 } 23 24 public void setName(String name) { 25 this.name = name; 26 } 27 28 public Course(int code, String name) { 29 super(); 30 this.code = code; 31 this.name = name; 32 } 33 34 @Override 35 public String toString() { 36 return "Course [code=" + code + ", name=" + name + "]"; 37 } 38 }
1 package com.lovo.day2; 2 3 import java.io.FileInputStream; 4 import java.io.FileNotFoundException; 5 import java.io.FileOutputStream; 6 import java.io.IOException; 7 import java.io.ObjectInputStream; 8 import java.io.ObjectOutputStream; 9 import java.util.Date; 10 11 public class ObjectTest { 12 13 public static void main(String[] args) { 14 Student stu = new Student("张飞", 18, true, 10.0, new Date(), new Course( 15 1, "语文")); 16 Student stu2 = new Student("张飞2", 18, true, 10.0, new Date(), new Course( 17 2, "数学")); 18 19 // 序列化 20 ObjectOutputStream out = null; 21 22 try { 23 out = new ObjectOutputStream( 24 new FileOutputStream("d:\student.bin")); 25 out.writeObject(stu); 26 out.writeObject(stu2); 27 } catch (FileNotFoundException e) { 28 e.printStackTrace(); 29 } catch (IOException e) { 30 e.printStackTrace(); 31 } finally { 32 if (out != null) { 33 try { 34 out.close(); 35 } catch (IOException e) { 36 e.printStackTrace(); 37 } 38 } 39 } 40 41 // 反序列化 42 ObjectInputStream in = null; 43 44 try { 45 in = new ObjectInputStream(new FileInputStream("d:\student.bin")); 46 Student stu1 = (Student) in.readObject(); 47 System.out.println(stu1); 48 49 System.out.println("*****************"); 50 51 System.out.println(stu1.getCourse()); 52 53 System.out.println("#######################################"); 54 55 Student stu21 = (Student) in.readObject(); 56 System.out.println(stu21); 57 58 System.out.println("*****************"); 59 60 System.out.println(stu21.getCourse()); 61 } catch (FileNotFoundException e) { 62 e.printStackTrace(); 63 } catch (IOException e) { 64 e.printStackTrace(); 65 } catch (ClassNotFoundException e) { 66 e.printStackTrace(); 67 } finally { 68 if (in != null) { 69 try { 70 in.close(); 71 } catch (IOException e) { 72 e.printStackTrace(); 73 } 74 } 75 } 76 } 77 }