【问题标题】:serialization and deserialization of multiple java objects in a single file单个文件中多个java对象的序列化和反序列化
【发布时间】:2011-06-03 06:50:49
【问题描述】:

我有一个场景,我有多个 HashMap 对象需要存储在同一个文本文件中。 例如:

    a.put("01jan", 13);
    a.put("02feb", 13);
    a.put("03march", 13);
    a.put("04apr", 13);
    a.put("05may", 13);

    b.put("06june", 12);
    b.put("07july", 12);
    b.put("08aug", 12);
    b.put("09sept", 12);
    b.put("10oct", 12);

我想使用 java 序列化将对象保存在同一个 txt 文件中。 有什么办法可以做到这一点,我尝试过使用FileOutputStream( file_name,true)。另外,当我尝试检索对象时,现在说HashMap b,当需要时说HashMap a。有没有办法做到这一点? 如何检索out of order 对象并检索正确的对象?

谢谢, 八卦

【问题讨论】:

    标签: java serialization hashmap


    【解决方案1】:

    您可以将所有的 hashmap 对象放在一个 ArrayList 中,然后序列化 ArrayList 对象。稍后当您取消实现 ArrayList 对象时,您可以取回单个 HashMap 对象:

    List<HashMap> list = new ArrayList<HashMap>();
    list.add(a);
    list.add(b);
    
    // serialize the list object
    

    【讨论】:

    • 假设我只想检索一个对象?这也太乱了,我该怎么办?
    • add(int index, E element) 在此列表中的指定位置插入指定元素。
    【解决方案2】:

    如果您有许多地图要存储,地图使用键/值对,因此我建议以键/值格式存储数据。 JSON 是基于键/值的人类可读数据可互换格式。它可以存储在一个文件中,您可以使用JSONObject(javadoc) 或GSON 来序列化/反序列化数据。

    例子:

    {"hashmap1": 
        [
            {"01jan": 13}, 
            {"02feb": 13}, 
            {"03march", 13}
        ]
    }
    

    【讨论】:

    • 谢谢,我会尝试使用 JSON 对象来查看是否能够以我需要的格式存储和检索数据
    【解决方案3】:

    无序检索对象没有任何好处,只需将所有数据保存到磁盘,并在需要时从磁盘加载所有数据。除非文件至少为 64KB,否则没关系。

    如果您的数据较大,您可以将 ab 放在单独的文件中,但它不太可能产生超过几毫秒的差异,但会使您的代码更加复杂。

    FileOutputStream(file_name,true)

    您不能将 ObjectOutputStream 附加到文件中。当你读回数据时,你只会得到第一个。 (你可以很痛苦地检索数据,但最好不要尝试)

    【讨论】:

      【解决方案4】:

      另一种方法是将每个 HashMap 作为一个条目放入 Zip 存档中。

      【讨论】:

        猜你喜欢
        • 2013-05-01
        • 2013-04-15
        • 2021-05-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-19
        相关资源
        最近更新 更多