Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Code Block
bgColor#FFcccc
String filename = "serial";
ObjectOutputStream oos = null;
try {
  // Serializing using writeUnshared
  ObjectOutputStream oos
      = new ObjectOutputStream(new FileOutputStream(filename));
  oos.writeUnshared(jane);
} catch (Exception e) {
  System.out.println("Exception during serialization" + e);
} finally {
  try {
    oos.close();
  } catch (IOException e) {
    System.out.println("Exception during serialization" + e);
  }
}

// Deserializing using readUnshared
  ObjectInputStream ois= null;
try {
    ois = new ObjectInputStream(new FileInputStream(filename));
  Professor jane2 = (Professor)ois.readUnshared();
  ois.close();

  System.out.println("checkTutees returns: " +
                     jane2.checkTutees());
  // prints "checkTutees returns: false"
} 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.

Code Block
bgColor#ccccff
String filename = "serial";
ObjectOutputStream oos = null;
try {
  // Serializing using writeUnshared
  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 (IOException e) {
    System.out.println("Exception during serialization" + e);
  }
}

// Deserializing using readUnshared
  ObjectInputStream ois= null;
try {
    ois = new ObjectInputStream(new FileInputStream(filename));
  Professor jane2 = (Professor)ois.readObject();
  ois.close();

  System.out.println("checkTutees returns: " +
                     jane2.checkTutees());
  // prints "checkTutees returns: false"
} 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.

...