अगर मैं एक Class
वस्तु को क्रमानुसार (उदाहरण के लिए, HashMap.class
), और फिर JVM का एक और उदाहरण में यह deserialize, यह पता चला है कि deserialized वर्ग एक वर्तमान में लोड करने के लिए समान होता है:जावा क्लास ऑब्जेक्ट्स को वर्तमान में लोड क्लास ऑब्जेक्ट्स को अपनी पहचान को संरक्षित करते समय कैसे कर सकता है?
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.HashMap;
final class DeserializationTest {
static String path = "/home/suseika/test.ser";
static Class<HashMap> cls = HashMap.class;
public static void main(String[] args) throws Exception {
if (args[0].equals("serialize")) {
serialize();
} else if (args[0].equals("deserialize")) {
final Object deserialized = deserialize();
// The important line, prints "true"
System.out.println(deserialized == cls);
}
}
static Object deserialize() throws Exception {
ObjectInputStream in = new ObjectInputStream(new FileInputStream(path));
return in.readObject();
}
static void serialize() throws Exception {
FileOutputStream fileOut = new FileOutputStream(path);
ObjectOutputStream out = new ObjectOutputStream(fileOut);
out.writeObject(cls);
out.close();
fileOut.close();
}
}
जावा कैसे है इस मामले में वस्तुओं को deserialize करने में सक्षम है ताकि पहचान संरक्षित है? Class
writeObject()
/readObject()
/readResolve()
लागू करने के लिए प्रतीत नहीं होता है।
क्या यह व्यवहार एक विशेष कक्षा लोड करने/किसी विशेष क्लासलोडर का उपयोग करके/किसी विशेष JVM सेटअप/serialization के दौरान कुछ करने के साथ टूट सकता है? क्या ऐसे उदाहरण हैं जहां लोड Class
deserialized एक जैसा नहीं होगा? दूसरे शब्दों में, क्या मैं Class
ऑब्जेक्ट्स को क्रमबद्ध और deserialize करने के लिए अपने आवेदन में इस व्यवहार पर भरोसा कर सकता हूं?
IMHO के लिए: एक deserialized वर्ग वस्तु पृथक होना चाहिए एक ही प्रकार के "मानक" वर्ग वस्तु का। Https://docs.oracle.com/javase/7/docs/api/serialized-form.html#java.lang.Class – Xvolks