<分区>
基本上,我有一个包含 2 种方法的类:一种用于将对象序列化为 XML 文件,另一种用于从 XML 中读取对象。 这是恢复对象的方法中同步部分的示例:
public T restore(String from) throws Exception {
// variables declaration
synchronized (from) {
try {
decoder = new XMLDecoder(new BufferedInputStream(
new FileInputStream(from)));
restoredItem = decoder.readObject();
decoder.close();
} catch (Exception e) {
logger.warning("file not found or smth: " + from);
throw new Exception(e);
}
}
// try to cast it
}
序列化对象时采用类似的方法。现在,当我创建一个单元测试时,它又创建了 10 个线程,每个线程都试图序列化并立即读取 boolean 值或字符串,它将无法显示 ClassCastExceptions 发生。这让我觉得我的序列化错误(在单线程环境中一切正常)。如果你一直陪我到现在 :),以下是我需要你帮助的 2 个问题:
- 同步传递给方法的字符串参数是否有意义(考虑到 java 中有一个字符串池)?顺便说一句,我已经尝试在 XMLSerializer 类本身上进行同步,结果保持不变。
- 如何正确同步单个文件的 io 操作?