java 物件流程

來源:互聯網
上載者:User

標籤: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 物件流程

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.