Java Serialization Example

Implementing an Embedded Object (Java)

public class User implements DataSerializable
{
    private String name;
    private int userId;
    private ExampleObject eo;
    static {
        Instantiator.register(
            new Instantiator(User.class, (byte)45)
                {
                    public DataSerializable newInstance() {
                        return new User();
                    }
                } );
    }
    /**
     * Creates an "empty" User whose contents are filled in by
     * invoking its toData() method
     */

    private User() {
        this.name = "";
        this.userId = 0;
        this.eo = new ExampleObject(0);
    }

    public User(String name, int userId) {
        this.name = name;
        this.userId = userId;
        this.eo = new ExampleObject(userId);
    }

    public void setEO(ExampleObject eo) {
        this.eo = eo;
    }

    public ExampleObject getEO() {
        return eo;
    }

    public void toData(DataOutput out) throws IOException {
        out.writeUTF(this.name);
        out.writeInt(this.userId);
        eo.toData(out);
    }

    public void fromData(DataInput in) throws IOException,
                                         ClassNotFoundException {
        this.name = in.readUTF();
        this.userId = in.readInt();
        this.eo.fromData(in);
    }

    public int getUserId() {
        return userId;
    }

    public String getName() {
        return name;
    }

    public boolean equals(User o) {
        if (!this.name.equals(o.name)) return false;
        if (this.userId != o.userId) return false;
        if (!this.eo.equals(o.eo)) return false;
        return true;
    }
}

Implementing Complex Data Types (Java)

public class ExampleObject implements DataSerializable {
    private double double_field;
    private long long_field;
    private float float_field;
    private int int_field;
    private short short_field;
    private java.lang.String string_field;
    private Vector string_vector;
    static {
        Instantiator.register(new Instantiator(ExampleObject.class, (byte) 46) {
            public DataSerializable newInstance() {
                return new ExampleObject();
            }
        });
    }
    public ExampleObject( ) {
        this.double_field = 0.0D;
        this.long_field = 0L;
        this.float_field = 0.0F;
        this.int_field = 0;
        this.short_field = 0;
        this.string_field = null;
        this.string_vector = null;
    }
    public ExampleObject(int id) {
        this.int_field = id;
        this.string_field = String.valueOf(id);
        this.short_field = Short.parseShort(string_field);
        this.double_field = Double.parseDouble(string_field);
        this.float_field = Float.parseFloat(string_field);
        this.long_field = Long.parseLong(string_field);
        this.string_vector = new Vector();
        for (int i=0; i<3; i++) {
            this.string_vector.addElement(string_field);
        }
    }
    public ExampleObject(String id_str) {
        this.int_field = Integer.parseInt(id_str);
        this.string_field = id_str;
        this.short_field = Short.parseShort(string_field);
        this.double_field = Double.parseDouble(string_field);
        this.float_field = Float.parseFloat(string_field);
        this.long_field = Long.parseLong(string_field);
        this.string_vector = new Vector();
        for (int i=0; i<3; i++) {
            this.string_vector.addElement(string_field);
        }
    }
    public double getDouble_field( ) {
        return this.double_field;
    }
    public void setDouble_field( double double_field ) {
        this.double_field = double_field;
    }
    public long getLong_field( ) {
        return this.long_field;
    }
    public void setLong_field( long long_field ) {
        this.long_field = long_field;
    }
    public float getFloat_field( ) {
        return this.float_field;
    }
    public void setFloat_field( float float_field ) {
        this.float_field = float_field;
    }
    public int getInt_field( ) {
        return this.int_field;
    }
    public void setInt_field( int int_field ) {
        this.int_field = int_field;
    }
    public short getShort_field( ) {
        return this.short_field;
    }
    public void setShort_field( short short_field ) {
        this.short_field = short_field;
    }
    public java.lang.String getString_field( ) {
        return this.string_field;
    }
    public void setString_field( java.lang.String string_field ) {
        this.string_field = string_field;
    }
    public Vector getString_vector( ) {
        return this.string_vector;
    }
    public void setString_vector( Vector string_vector ) {
        this.string_vector = string_vector;
    }
    public void toData(DataOutput out) throws IOException {
        out.writeDouble(double_field);
        out.writeFloat(float_field);
        out.writeLong(long_field);
        out.writeInt(int_field);
        out.writeShort(short_field);
        out.writeUTF(string_field);
        out.writeInt(string_vector.size());
        for (int i = 0; i < string_vector.size(); i++) {
            out.writeUTF((String)string_vector.elementAt(i));
        }
    }
    public void fromData(DataInput in) throws IOException,
                                              ClassNotFoundException {
        this.double_field = in.readDouble();
        this.float_field = in.readFloat();
        this.long_field = in.readLong();
        this.int_field = in.readInt();
        this.short_field = in.readShort();
        this.string_field = in.readUTF();
        this.string_vector = new Vector();
        int size = in.readInt();
        for (int i = 0; i < size; i++) {
            String s = in.readUTF();
            string_vector.add(i, s);
        }
    }
    public boolean equals(ExampleObject o) {
        if (this.double_field != o.double_field) return false;
        if (this.float_field != o.float_field) return false;
        if (this.long_field != o.long_field) return false;
        if (this.int_field != o.int_field) return false;
        if (this.short_field != o.short_field) return false;
        if (!this.string_field.equals(o.string_field)) return false;
        if (!this.string_vector.equals(o.string_vector)) return false;
        return true;
    }
}