Serializable序列化
对象的输入输出流
1 package file; 2 3 import java.io.File; 4 import java.io.FileInputStream; 5 import java.io.FileOutputStream; 6 import java.io.IOException; 7 import java.io.ObjectInputStream; 8 import java.io.ObjectOutputStream; 9 import java.io.Serializable; 10 11 12 /* 13 ObjectOutputStream的使用 14 1.如果对象要写到文件上,要实现Serializable 15 16 对象的输入流:ObjectOutputStream 17 对象的输出流:ObjectInputStream 18 19 2.对象的反序列化,不会调用对象的构造方法 20 3.serialVersionID 是用于记录class文件的版本信息的,serialVerionID这个数字是通过类的类名、成员、包名、工程名算出来的一个数字。 21 4。使用ObjectInputSteam反序列的时候,ObjectInputSteam会先读取文件中的serialVersionID,然后与本地的class文件的serialVersionID进行对比 22 如果2个ID不一致,那反序列化失败。 23 5.如果序列化与反序列化的时候可能会修改类的成员,那么就给类指定一个serialVersionID,然后在 24 序列化与反序列化的时候,jvm都不会再自己算这个serialVersionID了。
6.如果一个类维护了另外一个类,则另一个类也需要实现Serializable 25 */ 26 class User implements Serializable{ 27 28 private static final long serialVersionUID = 1L; //指定了serialVersionUID,无论怎么修改成员都可以反序列化成功 29 String username; 30 String password; 31 transient int age; //transient透明的,不显示到硬盘上32 33 User(String username, String password) { 34 this.username = username; 35 this.password = password; 36 } 37 38 @Override 39 public String toString() { 40 // System.out.println("hah"); //加了这句,只要类的成员没有变化就成的 41 return "用户名:"+ username + "密码:" + password; 42 } 43 44 } 45 46 47 48 public class Demo10 { 49 public static void main(String[] args) throws IOException, Exception { 50 // writeObj(); 51 readObj(); 52 } 53 54 55 //把文件的信息读取出来,就称为对象的反序列化 56 public static void readObj() throws IOException, ClassNotFoundException { 57 //找到目标文件 58 File file = new File("F:\\obj.txt"); 59 //建立数据的输入通道 60 FileInputStream fileInputStream = new FileInputStream(file); 61 //建立对象的输入对象 62 ObjectInputStream objectInputStream = new ObjectInputStream(fileInputStream); 63 //读取对象信息 64 User user = (User)objectInputStream.readObject(); //创建对象肯定要依赖对象所属的class文件 65 System.out.println("对象的信息" + user); 66 objectInputStream.close(); 67 68 } 69 70 71 72 //把对象的信息写到硬盘上,也成为对象的序列化 73 public static void writeObj() throws IOException { 74 //把user信息持久化存储。 75 User user = new User("admin", "123"); 76 //找到目标文件 77 File file= new File("F:\\obj.txt"); 78 //建立数据输出对象 79 FileOutputStream fileOutputStream = new FileOutputStream(file); 80 //建立对象的输出流对象 81 ObjectOutputStream objectOutputStream = new ObjectOutputStream(fileOutputStream); 82 //把对象写出 83 objectOutputStream.writeObject(user); 84 //关闭资源 85 objectOutputStream.close(); 86 } 87 }