【问题标题】:Is it recommended to serialize & deserialize objects that are stored in arrayList?是否建议对存储在 arrayList 中的对象进行序列化和反序列化?
【发布时间】:2015-07-02 19:13:06
【问题描述】:

在我的小型银行应用程序中,用户必须输入一些值(姓名、SSN、金额等),然后将它们存储在 arrayList 中。 arrayList 的大小是动态的。

但是这个问题是我一旦终止应用程序就会丢失所有数据。这让我想到了读写文件(文件I/O)的实现。

现在我也开始了解所谓的序列化和反序列化,虽然我不太确定在什么情况下需要实现它。

在我的特定情况下是否需要它,或者只是写入和读取文件就足够了?

序列化和反序列化与文件 I/O 有什么关系?

[注意:如有必要,我会提供更多信息]

【问题讨论】:

    标签: java serialization file-io arraylist deserialization


    【解决方案1】:

    这就是Database 出现的地方。首先,您可以使用MySQL DB - 它是一个出色的免费数据库,适用于中小型企业应用程序。稍后,如果您打算将您的应用部署到生产环境 - 拥有大量用户和高级功能,并准备为此付出代价 - 您可以考虑使用其他数据库,例如 Oracle 等。

    不建议将信息存储到文件((De)Serialization)用于任何实际应用。

    【讨论】:

    • 对于小型应用程序,HSQL、H2 或 Derby (JabaDB) 等嵌入式数据库也是不错的选择,因为它们不需要设置专用的服务器应用程序。
    【解决方案2】:

    当您想将自己的类的实例写入文件时,需要进行序列化。在您的情况下,您可以创建一个 java 类来保存有关客户的所有值,然后覆盖 hashCode() 和 equals(),然后将您的对象写入文件。 http://www.tutorialspoint.com/java/java_serialization.htm

    此外,如果需要,您可以将单个字段存储在文件中以及 int 或 String。

    虽然我建议使用数据库来存储所有这些信息。但是您似乎是一名学生,仍处于学习阶段。因此,目前而言,立即与 DB 交互可能不是一个好方法。

    【讨论】:

      【解决方案3】:

      序列化是一种机制,其中对象可以表示为字节序列,其中包括对象的数据以及有关对象类型和对象中存储的数据类型的信息。

      ArrayList 已经实现了 Serializable,因此在您的示例中,您可以编写如下内容:

       ArrayList<String> al=new ArrayList<String>();
       al.add("Jean");
       al.add("Pierre");
       al.add("John");
      
       try{
        FileOutputStream fos= new FileOutputStream("myfile.txt");
        ObjectOutputStream oos= new ObjectOutputStream(fos);
        oos.writeObject(al);
        oos.close();
        fos.close();
       }catch(IOException ioe){
        ioe.printStackTrace();
       }
      

      这里我们将列表 al 保存在文件 myfile.txt 中。

      要读取文件并取回 ArrayList,您可以使用 ObjectInputStream:

      FileInputStream fis = new FileInputStream("myfile.txt");
      ObjectInputStream ois = new ObjectInputStream(fis);
      
      ArrayList<String> list = (ArrayList<String>) ois.readObject();
      
      ois.close();
      

      【讨论】:

      • couscousman,谢谢,这么好的答案!我相信它会帮助我一路走来。我想知道的最后一件事是,在我的程序中,ArrayList 在我的主类中的主方法中。对于 setObject 和 get Object 我创建了另一个类。我还创建了第三个类来实现文件 I/O。假设类名是“ReaderWriter”。现在,我可以将 arrayList 的引用(在您的示例中称为“al”)到我的 ReaderWrite 类中吗?
      • 我不确定我是否理解您的问题,但我会尽力回答。您想要引用类中处理 I/O 内容的列表。你能把第二段代码放在我的答案中,在你班上的某个地方吗?然后,您将获得对您保存在文件中的列表的引用。
      【解决方案4】:
      Yes, you can use arraylist for serialization and deserialization. 
      Whenever u want to write and read the object into file and from file
      respectively then u need to be object should be serialized and object 
      write into the file in byte stream format.that means ur data will be secure in 
      stream.you can used serialization interface:-
      To persist data for future use.
      To send data to a remote computer using such client/server Java technologies as RMI or socket programming.
      To "flatten" an object into array of bytes in memory.
      To exchange data between applets and servlets.
      To store user session in Web applications.
      To activate/passivate enterprise java beans.
      To send objects between the servers in a cluster.
      and more............
      

      【讨论】:

        猜你喜欢
        • 2015-06-28
        • 2015-03-18
        • 2014-02-08
        • 2020-08-02
        • 1970-01-01
        • 1970-01-01
        • 2015-05-29
        • 2016-10-14
        • 2014-12-24
        相关资源
        最近更新 更多