/*
* 對象的輸入輸出流:
* 作用:用于寫對象的信息與讀取對象的信息,對象信息一旦寫到文件上那么對象的信息就可以做到持久化了津滞。
* 對象的輸出流:
* ObjectOutputStram
* 使用步驟:
*? 1.定位要輸出的文件位置;
*? 2. 定義輸入字節(jié)流通道:
*? 3. 定義對象輸出通道:
*? 4.輸入對象信息:
*? 5.關閉資源灼伤;
* 對象的輸入流:
* ObjectInputStream
* 使用步驟:
* 1.定義要輸入的文件的對象信息文件位置触徐;
*? 2.定義輸入字節(jié)流通道:
*? 3.定義對象輸入通道;
*? 4.讀取對象信息狐赡;
*? 5.關閉資源撞鹉;
*
*? *? 注意事項:
*? 1. 如果對象需要被寫入到文件中,那么對象必須實現Serializable接口颖侄,Serializable接口沒有任何方法鸟雏,是一個標識接口;
*? 所有的集合類都實現了該接口;
*? 2.對象的反序列化不會調用構造方法览祖;
*? 3. serialVersionUID 是用于記錄class文件的版本信息的孝鹊,serialVersionUID是通過類名、成員名展蒂、報名和工程名算出來的數字又活。
*? 4.如果反序列化使用了ObjectInputStream反序列化的時候,ObjectInputStream 會先讀取文件的serialVersionUID,然后與本地的class文件的serialVersionUID
*? 進行對比锰悼,如果id不一致柳骄,那么反序列化就會失敗箕般;
*? 5.如果序列化與反序列化的時候可能修改類的成員耐薯,那么最好最開始就給這個類指定一個serialVersionUIG,如果類的serialVersionUID指定了,俺么在序列化
*? 和反序列化的時候隘世,jvm就不會再計算serialVersionUID;
*
*? 6.成員前面加上transient關鍵字可柿,該成員就不會被寫出了、
*? 7.如果要給類中的成員是另一個類的引用丙者,那么該類也要實現Serializable,才能夠被寫入;
*/
package com.michael.lin;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
class User implements Serializable{
String userName; //用戶民
String password; //密碼
public User(String userName, String password){
this.userName = userName;
this.password = password;
}
@Override
public String toString() {
// TODO Auto-generated method stub
return "用戶名" + this.userName + "密碼" + this.password;
}
}
public class Demo03 {
public static void main(String[] args) throws IOException, ClassNotFoundException{
//把User的對象持久化存儲
writeObj();
readObj();
}
//把對象的信息寫入到硬盤上 --> 對象的序列化
public static void writeObj() throws IOException{
User user = new User("michael", "123");
//找到目標文件
File file = new File("g:\\obj.txt");
//建立文件輸出流通道
FileOutputStream fileOutputStream = new FileOutputStream(file);
//建立對象輸出流通道
ObjectOutputStream objOutputStream = new ObjectOutputStream(fileOutputStream);
//對象輸出
objOutputStream.writeObject(user);
objOutputStream.close();
}
//對象的反序列化,把文件中的對象信息讀取出來
public static void readObj() throws IOException, ClassNotFoundException{
//1.定義對象信息文件袋餓位置
File file = new File("g:\\obj.txt");
//2.定義輸出文件字節(jié)流:
FileInputStream fileInputStream = new FileInputStream(file);
//3.定義對象輸出通道
ObjectInputStream objInputStream = new ObjectInputStream(fileInputStream);
//4.讀取對象信息;
System.out.println(objInputStream.readObject());
//5.關閉資源
objInputStream.close();
}
}