这可能只是一个语法问题(而且我无法找到它;)
以下是要序列化(反序列化)的集合:
private Map<String, Terminal> terminals = Collections.synchronizedMap(new HashMap<String, Terminal>());
private List<Host> hosts = Collections.synchronizedList(new ArrayList<Host>());
这里进行序列化:
ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("blah.dmp"));
out.writeObject(synchronizedMap);
out.writeObject(synchronizedList);
现在反序列化,这会抛出 ClassCastException(显然):
terminals = (HashMap<String, Terminal>) in.readObject();
hosts = (ArrayList<Hosts>) in.readObject();
但以下内容无法编译(以及我尝试过的许多其他变体):
terminals = (Collections.synchronizedMap(new HashMap<String, Terminal>())) in.readObject();
hosts = (Collections.synchronizedList(new ArrayList<Host>())) in.readObject();
最佳答案
这个怎么样?
terminals = (Map<String, Terminal>) in.readObject();
hosts = (List<Hosts>) in.readObject();
由 Collections.synchronizedMap
/Collections.synchronizedList
包装的 Map
或 List
应该可以很好地反序列化,而无需需要重新包装它。
关于java - 如何反序列化synchronizedMap和synchronizedList?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2068401/