सटीक टॉम Hawtin का जवाब करने के लिए, मैं निम्नलिखित कोड का उपयोग कर इसे लागू करने में कामयाब रहे:
public static ObjectInputStream getSwapOIS(InputStream in ,String fromClass,String toClass)
throws IOException ,ClassNotFoundException {
final String from="^"+fromClass,fromArray="^\\[L"+fromClass,toArray="[L"+toClass;
return new ObjectInputStream(in) {
protected Class<?> resolveClass(ObjectStreamClass desc)
throws IOException, ClassNotFoundException
{
String name = desc.getName().replaceFirst(from, toClass);
name = name.replaceFirst(fromArray, toArray);
return Class.forName(name);
}
protected ObjectStreamClass readClassDescriptor()
throws IOException, ClassNotFoundException
{
ObjectStreamClass cd = super.readClassDescriptor();
String name = cd.getName().replaceFirst(from, toClass);
name = name.replaceFirst(fromArray, toArray);
if(!name.equals(cd.getName())) {
cd = ObjectStreamClass.lookup(Class.forName(name));
}
return cd;
}
};
}
ध्यान दें कि आप भी readClassDescriptor ओवरराइड करने के लिए की जरूरत है()। यह मानक प्रकारों और सरणी दोनों के लिए काम करता है और आप कक्षा का नाम भी पैकेज नाम नहीं बदल सकते हैं। बस कार्य करें: enum के नाम com.oldPackage.Person है और नया नाम com.newPack.Person मैं धारावाहिक डेटा में और क्या जगह जाना चाहिए
InputStream in = new ByteArrayInputStream(classBytes);
ObjectInputStream ois = getSwapOIS( in,
"com.oldpackage.className",
"com.newpackage.newClassName");
Object myObject= ois.readObject();
हैं: 1) com.oldPackage बदलें। Com.newPack.Person 2) कॉम/पुरानी पैकेज/कॉम/न्यूपैक/व्यक्ति – ChrisOdney
के साथ व्यक्ति को बदलें क्योंकि com.oldPackage नामक एक क्लास भी है।व्यक्ति विवरण और यह उपर्युक्त परिचालनों से प्रभावित होगा, मैं निम्नलिखित करता हूं: 3) com.newPack.PersonDetails (1 का परिणाम) com.oldPackage.PersonDetails 4) कॉम/न्यूपैक/व्यक्ति विवरण ((परिणाम का परिणाम) 2)) कॉम/पुरानी पैकेज/व्यक्ति विवरण क्या आप कृपया मेरी मदद कर सकते हैं अगर मुझे कुछ याद आ रही है? – ChrisOdney