...
| Code Block | ||
|---|---|---|
| ||
String filename = "serial";
try(ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(filename))) {
// Serializing using writeUnshared
oos.writeUnshared(jane);
} catch (Exception e) {
System.out.println("Exception during serialization" + e);//handle error
}
// Deserializing using readUnshared
try(ObjectInputStream ois = new ObjectInputStream(new FileInputStream(filename))){
Professor jane2 = (Professor)ois.readUnshared();
System.out.println("checkTutees returns: " +
jane2.checkTutees());
} catch (Exception e) {
System.out.println("Exception during deserialization" + e);//handle error
} |
Compliant Solution
This compliant solution overcomes the problem of the noncompliant code example by using writeObject() and readObject(), ensuring that the tutor object referred to by the three students has a one-to-one mapping with the original Professor object. The checkTutees() method correctly returns true.
| Code Block | ||
|---|---|---|
| ||
String filename = "serial";
try(ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(filename))) {
// Serializing using writeUnshared
oos.writeObject(jane);
} catch (Exception e) {
System.out.println("Exception during serialization" + e);//handle error
}
// Deserializing using readUnshared
try(ObjectInputStream ois = new ObjectInputStream(new FileInputStream(filename))) {
Professor jane2 = (Professor)ois.readObject();
System.out.println("checkTutees returns: " +
jane2.checkTutees());
} catch (Exception e) {
System.out.println("Exception during deserialization" + e);//handle error
} |
Applicability
Using the writeUnshared() and readUnshared() methods may produce unexpected results.
...