標籤:log 實現 ati tool set 輸入 標記 處理 轉換
物件流程
ObjectInputStream ObjectOutputStream類分別是InputStream和OutputStream的子類,對象輸出資料流使用writeObject(Object obj)方法,將一個對象obj寫入到一個檔案,使用readObject()讀取一個對象。
構造方法:
ObjectInputStream (InputStream in)
ObjectOutputStream(OutputStream out)
當準備將一個對象寫入檔案的時候,首先用OutputStream的子類建立一個輸出資料流。
OutputStream outStream = new FileOutputStream("file_name");
ObjectOutputStream objstream = new ObjectOutputStream(outStream);
當使用物件流程寫入或者讀取對象的時候,必須保證該對象是序列化的,這樣是為了保證對象能夠正確的寫入檔案,並能夠把對象正確的讀回程式。
所謂的對象的序列化就是將對象轉換成位元據流的一種實現手段,通過將對象序列化,可以方便的實現對象的傳輸及儲存。在Java中提供了ObejctInputStream 和ObjectOutputStream這兩個類用於序列化對象的操作。用於儲存和讀取對象的輸入輸出資料流類,要想實現對象的序列化需要實現Serializable介面,但是Serializable介面中沒有定義任何的方法,僅僅被用作一種標記,以被編譯器作特殊處理。
1 package project; 2 import java.io.*; 3 //實現Serializable 介面 4 class TV implements Serializable{ 5 /** 6 * 7 */ 8 private static final long serialVersionUID = 1597309922188243103L; 9 String name;10 int price;11 public void setName(String name){12 this.name = name;13 }14 public void setPrice(int price){15 this.price = price;16 }17 public String getName() {18 return name;19 }20 public int getPrice() {21 return price;22 }23 24 }25 public class Main{26 public static void main(String[] args) {27 TV changhongTv = new TV();28 changhongTv.setName("長虹電視");29 changhongTv.setPrice(5678);30 File file = new File("changhong");31 try {32 //序列化寫入檔案33 OutputStream outputStream = new FileOutputStream(file);34 ObjectOutputStream objectOutputStream = new ObjectOutputStream(outputStream);35 objectOutputStream.writeObject(changhongTv);36 objectOutputStream.close();37 38 //序列化讀取對象39 InputStream inputStream = new FileInputStream(file);40 ObjectInputStream objectInputStream = new ObjectInputStream(inputStream);41 TV xinfeiTv = (TV)objectInputStream.readObject();42 objectInputStream.close();43 44 45 xinfeiTv.setName("新飛電視");46 xinfeiTv.setPrice(6666);47 48 System.out.println("changhong name "+changhongTv.getName());49 System.out.println("changhong price "+changhongTv.getPrice());50 51 System.out.println("xinfei name "+xinfeiTv.getName());52 System.out.println("xinfei price "+xinfeiTv.getPrice()); 53 54 } catch (ClassNotFoundException e) {55 // TODO: handle exception56 System.out.println("不能讀取對象");57 }catch (IOException e) {58 // TODO: handle exception59 System.out.println(e);60 }61 }62 }
對象的序列化的實現方便了對象間的複製,使得複製品實體的變化不會引起原對象實體的變化。
下面是一個執行個體:
另外,Java.awt包中的Componet類是實現Serializable介面的類,因此程式可以實現把組件寫入輸出資料流,然後用輸入資料流讀取該組件的複製。
java 物件流程