java 物件流程的簡單使用,java物件流程
對象的輸入輸出資料流的作用: 用於寫入對象 的資訊和讀取對象的資訊。 使得對象持久化。
ObjectInputStream : 對象輸入資料流
ObjectOutPutStream :對象輸出資料流
簡單的執行個體
1 import java.io.File; 2 import java.io.FileInputStream; 3 import java.io.FileOutputStream; 4 import java.io.IOException; 5 import java.io.ObjectInputStream; 6 import java.io.ObjectOutputStream; 7 import java.io.Serializable; 8 9 //建立要寫入磁碟的類,這個類需要實現介面 Serializable(可系列化的)10 class Student implements Serializable{11 12 // 在這裡保證了serialVersionUID 的唯一性,防止屬性變數的臨時改變,從而造成寫入id與讀取id不同13 private static final long serialVersionUID = 1L; 14 int id ; //額外需要添加一個屬性15 16 String name ;17 transient String sex; //transient修飾屬性,表示暫時的,則這個屬性不會被寫入磁碟18 transient int age;19 20 public Student(String name,String sex,int age){21 this.name = name;22 this.sex = sex;23 this.age = age;24 }25 }26 27 28 public class objectIO {29 30 /**31 * @param args32 * @throws IOException 33 * @throws ClassNotFoundException 34 */35 public static void main(String[] args) throws IOException, ClassNotFoundException {36 // TODO Auto-generated method stub37 38 createObj();39 readObj();40 }41 42 //(一)先寫入對象43 public static void createObj() throws IOException {44 //1.建立目標路徑45 File file = new File("C:\\Users\\bigerf\\Desktop\\objTest.txt");46 //2.建立流通道47 FileOutputStream fos = new FileOutputStream(file);48 //3.建立對象輸出資料流49 ObjectOutputStream objOP = new ObjectOutputStream(fos);50 //4.建立類對象,並初始化51 Student stu = new Student("瑪麗蘇", "男", 18);52 //5.向目標路徑檔案寫入對象53 objOP.writeObject(stu);54 //6.關閉資源55 objOP.close();56 }57 58 //再讀取對象59 public static void readObj() throws IOException, ClassNotFoundException {60 File file = new File("C:\\Users\\bigerf\\Desktop\\objTest.txt");61 FileInputStream fis = new FileInputStream(file);62 ObjectInputStream objIP = new ObjectInputStream(fis);63 //讀取對象資料,需要將物件流程強制轉換為 要寫入對象的類型64 Student stu = (Student)objIP.readObject();65 System.out.println("\n name:"+stu.name+"\n sex:"+stu.sex+"\n age:"+stu.age);66 objIP.close(); 67 }68 69 }
列印效果
name:瑪麗蘇 sex:null //後面的這連個屬性使用了 transient修飾 age:0
用到方法:writeObject(Object o); //向磁碟寫入對象
readObject(); //讀取磁碟的對象,注意這裡需要強制類型
對象輸入輸出資料流的使用注意點:
1.如果想將一個對象寫入到磁碟中,那麼對象所屬的類必須要進行序列化,實現Serializable 介面,Serializable介面沒有任何方法 ,是一個標記介面
2.如果對象所屬的類的成員變數發生改變,你在讀取原來的對象是就會報錯,如果想要解決報錯,保證serialVersionUID是唯一。
3.如果你不想將某些資訊存入到磁碟 就可以同過transient關鍵字修飾成員變數
4.如果一個類中引用了另外的一個類,那麼另外的這個類也要實現Serializable介面。
如果: