...
Code Block | ||
---|---|---|
| ||
String filename = "serial"; ObjectOutputStream oos = null; try { // Serializing using writeUnshared try(ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(filename)); oos.writeUnshared(jane); } catch (Exception e) { System.out.println("Exception during serialization" + e); } finally { try {// Serializing using writeUnshared oos.closewriteUnshared(jane); } catch (IOExceptionException e) { System.out.println("Exception during serialization" + e); } } // Deserializing using readUnshared try(ObjectInputStream ois= null; try { 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); } finally { try { ois.close(); } catch (IOException e) { System.out.println("Exception during deserialization" + e); } } |
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. So the checkTutees()
method correctly returns true.
Code Block | ||
---|---|---|
| ||
String filename = "serial"; ObjectOutputStream oos = null; try { // Serializing using writeUnshared try(ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(filename)); oos.writeObject(jane); } catch (Exception e) { // System.out.println("Exception during serialization" + e); } finally { try { oos.close(); } catch (IOExceptionSerializing using writeUnshared oos.writeObject(jane); } catch (Exception e) { System.out.println("Exception during serialization" + e); } } // Deserializing using readUnshared try(ObjectInputStream ois= null; try { 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); } finally { try { ois.close(); } catch (IOException e) { System.out.println("Exception during deserialization" + e); } } |
Applicability
Using the writeUnshared()
and readUnshared()
methods may produce unexpected results.
...