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 }

 

posted @ 2016-07-13 12:16  微风星宇  阅读(282)  评论(0编辑  收藏  举报