2011-06-03 101 views
1

我有一个场景,我有多个HashMap对象需要存储在同一个文本文件中。 例如:单个文件中多个java对象的序列化和反序列化

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对象并检索正确的对象?

感谢, 巴维亚

回答

6

你可以把所有的HashMap对象的ArrayList,然后序列化ArrayList对象。后来,当你deserealize ArrayList的对象,你可以得到个人的HashMap对象退回:

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

// serialize the list object 
+0

假设我想检索一个对象?那也不符合我怎么做? – bhavya 2011-06-03 09:02:07

2

如果你有许多地图存储,地图使用键/值对,所以我会建议存储关键数据/值格式。 JSON是基于键/值的人可读数据可交换格式。它可以存储在一个文件中,您可以使用JSONObjectjavadoc)或GSON来序列化/反序列化数据。

实施例:

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

谢谢我将尝试使用JSON对象来查看我是否能够以我需要的格式存储和检索数据 – bhavya 2011-06-03 09:03:27

0

另一种方法是将每个HashMap作为一个Zip文件的条目。

1

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

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

FileOutputStream中(FILE_NAME,真)

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