2013-02-12 70 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