【发布时间】:2010-07-27 20:07:21
【问题描述】:
我有以下 HashMap:
HashMap<String,Object> fileObj = new HashMap<String,Object>();
ArrayList<String> cols = new ArrayList<String>();
cols.add("a");
cols.add("b");
cols.add("c");
fileObj.put("mylist",cols);
我将其写入文件如下:
File file = new File("temp");
FileOutputStream f = new FileOutputStream(file);
ObjectOutputStream s = new ObjectOutputStream(f);
s.writeObject(fileObj);
s.flush();
现在我想把这个文件读回一个HashMap,其中Object是一个ArrayList。 如果我只是这样做:
File file = new File("temp");
FileInputStream f = new FileInputStream(file);
ObjectInputStream s = new ObjectInputStream(f);
fileObj = (HashMap<String,Object>)s.readObject();
s.close();
这并没有以我保存它的格式给我对象。
它返回一个包含 15 个 null 元素和 对在第 3 个元素的表。我希望它只返回一个具有我一开始提供给它的值的元素。
//如何将同一个对象读回HashMap?
好的,所以根据 Cem 的注释:这似乎是正确的解释:
ObjectOutputStream 以 ObjectInputStream 可以理解反序列化的任何格式序列化对象(在这种情况下为 HashMap),并且通常对任何 Serializable 对象执行此操作。 如果您希望它以您希望的格式序列化,您应该编写自己的序列化器/反序列化器。
在我的例子中:当我从文件中读回 Object 并获取数据并用它做任何我想做的事情时,我只需遍历 HashMap 中的每个元素。 (它只在有数据的地方进入循环)。
谢谢,
【问题讨论】:
-
“没有以我保存的格式给我对象”是什么意思?提供一些您所看到的和您期望的示例。
-
为什么你的 HashMap 没有声明为
HashMap<String,List<String>>? -
+1 用于 HashMap
> -
它返回一个包含 15 个空元素的表,并且在第三个元素处有
对。我希望它只返回一个具有我一开始提供给它的值的元素。 -
15 个空元素的键是什么? fileObj.size() 的结果是什么?