bpg*_*rgo 2 java serialization deserialization
我们知道,当我反序列化一个序列化的Java对象树时,树中的所有类都必须在类路径上.因此,由于有人将某些类移动到另一个包中,因此反序列化会抛出ClassNotFoundException.
我的问题是,有没有比实现我自己的序列化/反序列化更简单的方法来解决这个问题?
好的,我意识到这个问题可能是重复的.斯蒂芬对前一篇文章的回答对我很有用,我可以反序化那些被移到另一个包中的类.为了记录,我在这里放了我使用的ObjectInputStream的子类.
public class ClassNameMappingObjectInputStream extends ObjectInputStream {
public static Map<String, Class> classNameMapping = initclassNameMapping();
private static Map<String, Class> initclassNameMapping(){
Map<String, Class> res = new HashMap<String, Class>();
res.put("com.lsy.nlm.report.filter.Filter", com.lsy.nlm.filter.Filter.class);
res.put("com.lsy.nlm.report.filter.FilterSummary", com.lsy.nlm.filter.FilterSummary.class);
res.put("com.lsy.nlm.report.filter.TopFilter", com.lsy.nlm.filter.TopFilter.class);
return Collections.unmodifiableMap(res);
}
public ClassNameMappingObjectInputStream(InputStream in) throws IOException {
super(in);
}
protected ClassNameMappingObjectInputStream() throws IOException, SecurityException {
super();
}
@Override
protected java.io.ObjectStreamClass readClassDescriptor()
throws IOException, ClassNotFoundException {
ObjectStreamClass desc = super.readClassDescriptor();
if (classNameMapping.containsKey(desc.getName())){
return ObjectStreamClass.lookup(classNameMapping.get(desc.getName()));
}
return desc;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2439 次 |
| 最近记录: |