java - 如何反序列化synchronizedMap和synchronizedList?

标签 java serialization syntax

这可能只是一个语法问题(而且我无法找到它;)

以下是要序列化(反序列化)的集合:

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 包装的 MapList 应该可以很好地反序列化,而无需需要重新包装它。

关于java - 如何反序列化synchronizedMap和synchronizedList?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2068401/

相关文章:

java.lang.ClasscastException : java. lang.Long 无法转换为 java.lang.Double

java - Spring Integration : javax. persistence.TransactionRequiredException:没有事务正在进行

java - 旋转二维数组 - 一个工作示例和一个损坏的示例(为什么?)

sql - 为什么给别名SQL表使用“AS”?

java - 使用 guice 将运行时参数传递给构造函数

c# - 对于新的 .net 核心应用程序,我应该在 protobuf-net 和 google.protobuf 之间使用什么 NuGet 包?

c# - InvalidDataContractException 是无效的集合类型,因为它具有 DataContractAttribute

java - 为什么生成 long serialVersionUID 而不是简单的 1L?

python - python中的随机语法错误?

excel - 指数回归 : Translate mathematical notation to Excel syntax