Java類中對象的序列化工作是通過ObjectOutputStream和ObjectInputStream來完成的。 寫入: 讀取: 註意: 對於任何需要被序列化的對象,都必須要實現介面Serializable,它只是一個標識介面,本身沒有任何成員,只是用來標識說明當前的實現類的對象可以被序列化。 ...
Java類中對象的序列化工作是通過ObjectOutputStream和ObjectInputStream來完成的。
寫入:
1 File aFile=new File("e:\\c.txt"); 2 Stu a=new Stu(1, "aa", "1"); 3 FileOutputStream fileOutputStream=null; 4 try { 5 fileOutputStream = new FileOutputStream(aFile); 6 ObjectOutputStream objectOutputStream=new ObjectOutputStream(fileOutputStream); 7 objectOutputStream.writeObject(a); 8 objectOutputStream.flush(); 9 objectOutputStream.close(); 10 } catch (FileNotFoundException e) { 11 // TODO Auto-generated catch block 12 e.printStackTrace(); 13 } catch (IOException e) { 14 // TODO Auto-generated catch block 15 e.printStackTrace(); 16 }finally { 17 if(fileOutputStream!=null) 18 { 19 try { 20 fileOutputStream.close(); 21 } catch (IOException e) { 22 // TODO Auto-generated catch block 23 e.printStackTrace(); 24 } 25 } 26 }
讀取:
1 FileInputStream fileInputStream=new FileInputStream(aFile); 2 ObjectInputStream objectInputStream=new ObjectInputStream(fileInputStream); 3 Stu s=(Stu)objectInputStream.readObject(); 4 System.out.println(s);
註意:
對於任何需要被序列化的對象,都必須要實現介面Serializable,它只是一個標識介面,本身沒有任何成員,只是用來標識說明當前的實現類的對象可以被序列化。
如果在類中的一些屬性,希望在對象序列化過程中不被序列化,使用關鍵字transient標註修飾就可以。當對象被序列化時,標註為transient的成員屬性將會自動跳過。如果一個可序列化的對象包含某個不可序列化對象的引用,那麼序列化操作會失敗,會拋出NotSerializableException異常,那麼將這個引用標記transient,就可以序列化了。
當一個對象被序列化時,只保存對象的非靜態成員變數,不能保存任何的成員方法,靜態的成員變數。
如果一個對象的成員變數是一個對象,那麼這個對象的數據成員也會被保存還原,而且會是遞歸的方式。