单个文件中多个java对象的序列化和反序列化
我有一个场景,我有多个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 b
和HashMap a
当需要时。有没有办法达到这个目的? 如何检索out of order
对象并检索正确的对象?
感谢, 巴维亚
你可以把所有的HashMap对象的ArrayList,然后序列化ArrayList对象。后来,当你deserealize ArrayList的对象,你可以得到个人的HashMap对象退回:
List<HashMap> list = new ArrayList<HashMap>();
list.add(a);
list.add(b);
// serialize the list object
如果你有许多地图存储,地图使用键/值对,所以我会建议存储关键数据/值格式。 JSON是基于键/值的人可读数据可交换格式。它可以存储在一个文件中,您可以使用JSONObject(javadoc)或GSON来序列化/反序列化数据。
实施例:
{"hashmap1":
[
{"01jan": 13},
{"02feb": 13},
{"03march", 13}
]
}
谢谢我将尝试使用JSON对象来查看我是否能够以我需要的格式存储和检索数据 – bhavya 2011-06-03 09:03:27
另一种方法是将每个HashMap
作为一个Zip文件的条目。
按顺序检索对象没有什么好处,只需将所有数据保存到磁盘,并在需要时从磁盘加载所有数据。除非文件大小至少为64KB,否则无关紧要。
如果您的数据较大,您可以将a
和b
放在单独的文件中,但它不会超过几毫秒的差异,但会使您的代码更加复杂。
FileOutputStream中(FILE_NAME,真)
不能ObjectOutputStream中的附加到文件。当你读回数据时,你只会得到第一个。 (你可以用很多痛苦检索数据,但最好不要尝试)
假设我想检索一个对象?那也不符合我怎么做? – bhavya 2011-06-03 09:02:07