I have the following class
class UserAccount implements Serializable
{
    public String username;
    public String password;
    public UserAccount()
    {
        username = "defaultUsername";
        password = "defaultPassword";
    }
    public UserAccount(String u, String p)
    {
        username = u;
        password = p;
    }
    private void readObject(ObjectInputStream o) 
            throws IOException, ClassNotFoundException
    {
        //username = (String)o.readObject();
        o.defaultReadObject();
    }
    private void writeobject(ObjectOutputStream o) 
            throws IOException, ClassNotFoundException
    {
        //o.defaultWriteObject();
        o.writeObject(username);
    }
    public String toString()
    {
        return username + ", " + password;
    }
}
And I wrote the following snippet to serialize and de-serialize an instance of it.
ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(new File("out.dat")));
out.writeObject(new UserAccount("test", "test2"));
out.close();
ObjectInputStream in = new ObjectInputStream(new FileInputStream(new File("out.dat")));
UserAccount u = (UserAccount)in.readObject();
in.close();
System.out.println(u);
I am customizing the serialization using the writeObject() hook, such that, I am only persisting the username. But when I read back the object, I do the default de-serialization.
I am expecting the output to be test, null while the out put is test, test2
Basically I am expecting the member password to be null since I did not persist it. Can anyone help me understand how password is initialized to test2.
I also verified that the call to the constructor was not made[I knew it wouldn't be made, but I checked nevertheless] during deserialization.
Thanks in advance.
 
     
     
    