2013-02-12 71 views
0

在我的一次採訪中,Interviewer向我介紹了通過FTP獲取文件的情況,其中每個字段都以逗號分隔存儲訂單信息。我需要使用序列化將此信息存儲在類Order的對象中。反序列化訂單信息的序列化

文件格式: 訂單ID,securityName,買/賣,訂單類型,數量,價格

Class Order 
{ 
    int orderId; 
    String securityName; 
    .... 

} 

我想在這裏指出,該文件被其他應用程序生成的,我們必須要使用的文件由該應用程序生成。我很困惑,我會怎麼做,因爲那裏沒有編組,所以我如何解開數據?

回答

0

從技術上講,你會使用反序列化來存儲文件數據爲對象。演習是認識到通過實現你的類下面的方法,你可以實現對象的自定義序列化/反序列化的點:

private void writeObject(java.io.ObjectOutputStream stream) 
    throws IOException; 

private void readObject(java.io.ObjectInputStream stream) 
    throws IOException, ClassNotFoundException; 

你的具體情況,你會被實施readObject方法,從閱讀逗號分隔值文件,並用獲得的值填充對象的實例。喜歡的東西:

class Order implements Serializable { 
    private static final long serialVersionUID = -6730370200519884700L; 

    // Instance variables, Constructors, Getters/Setters 

    private void readObject(ObjectInputStream stream) { 
     // obtain data from stream and use 
    } 
} 

很明顯,這是僞代碼,但它應該給你從哪裏開始的想法。

+0

感謝感。我認爲這是採訪必須期待的內容。 – 2013-02-12 01:53:55

+0

完成從頭到尾的廢話。一個ObjectInputStream不是一個CSV文件。 readObject()方法具有ObjectInputStream參數,而不是ObjectOutputStream。您不能從任何類型的輸出流中讀取任何內容。面試官明確表示,儘管您的相反說法毫無意義,但數據將通過序列化保存,而不是反序列化。你在開玩笑嗎? -1 – EJP 2013-02-12 08:10:38

+0

你是認真的嗎?你的整個咆哮都是基於明顯的錯字(請重新閱讀上面幾行的簽名)。這是邊緣巨魔行爲,即使對你也是如此。 – Perception 2013-02-12 11:41:13

1
  1. 讀取CSV文件以獲取訂單對象列表。
  2. 使用序列化將包裝器對象存儲在文件中。
+0

我不想將對象存儲迴文件。問題是,我可以使用反序列化過程而不是手動執行文件處理操作,然後加載Order對象,將訂單信息送入訂單對象? – 2013-02-12 01:05:43

+0

@HardikShah不,它不是。問題是你正在獲得一個CSV文件,並且必須將這些信息通過序列化*存儲在類Order *的對象中。你自己的話。反序列化無關緊要。 – EJP 2013-02-12 21:16:28