单个文件中多个java对象的序列化和反序列化

时间:2011-06-03 06:50:49

标签: java serialization hashmap

我有一个场景,我有多个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 bHashMap a。有没有办法实现这个目标? 如何检索out of order个对象并检索正确的对象?

谢谢, Bhavya

4 个答案:

答案 0 :(得分:7)

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

List<HashMap> list = new ArrayList<HashMap>();
list.add(a);
list.add(b);

// serialize the list object

答案 1 :(得分:2)

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

示例:

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

答案 2 :(得分:1)

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

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

  

FileOutputStream(file_name,true)

您无法将ObjectOutputStream附加到文件中。当您读回数据时,您将只获得第一个数据。 (您可以通过很多痛苦来检索数据,但最好不要尝试)

答案 3 :(得分:0)

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

相关问题