A Simple Application
Home ] Up ] [ A Simple Application ] Changing a Class ] Specifying an Explicit Version ]

 

 

Consider the following classes:

package serialization;

import java.io.Serializable;

public class Address implements Serializable
{
    public Address(String name, String address)
    {
        m_name = name;
        m_address = address;
    }
    
    public String getName()
    {
        return m_name;
    }
    
    public String getAddress()
    {
        return m_address;
    }
    
    ///// Private data /////
    private String m_name;
    private String m_address;
}
package serialization;

import java.io.Serializable;
import java.util.Enumeration;
import java.util.Hashtable;

public class AddressBook implements Serializable
{
    public Address lookup(String name)
    {
        return (Address) m_table.get(name);
    }
    
    public Address add(String name, String address)
    {
        return (Address) m_table.put(name,
                                     new Address(name,
                                                 address));
    }
    
    public int size()
    {
        return m_table.size();
    }
    
    public Enumeration addresses()
    {
        return m_table.elements();
    }
    
    //// Private data ////
    private Hashtable m_table = new Hashtable();
}

Now, let's write a program to populate an AddressBook with Addresses and then serialize the results out:

package serialization;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;

public class SerializeOutAddressBook
{
    public static void main(String[] args)
    {
        AddressBook book = new AddressBook();
        book.add("Bill Gates", "1000 High-on-the-Hog Drive");
        book.add("Scott McNealy", "4000 Java Circle");
        book.add("Linus Torvalds", "300 Linux Lane");
        
        FileOutputStream fout = null;
        ObjectOutputStream out = null;
        try
        {
            fout = new FileOutputStream("addrbook.ser");
            out = new ObjectOutputStream(fout);
            out.writeObject(book);
            
            System.out.println("Serialization successful!");
        }
        catch(IOException ex)
        {
            ex.printStackTrace();
        }
        finally
        {
            try
            {
                if (out != null)
                    out.close();
                if (fout != null)
                    fout.close();
            }
            catch(IOException ex)
            {   /* Do nothing */ }
        }
    }
}

Finally, let's write a program to serialize the AddressBook back in, and display the Addresses it contains:

package serialization;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.util.Enumeration;

public class SerializeInAddressBook
{
    public static void main(String[] args)
    {
        AddressBook book = null;
        FileInputStream fin = null;
        ObjectInputStream in = null;
        try
        {
            fin = new FileInputStream("addrbook.ser");
            in = new ObjectInputStream(fin);
            book = (AddressBook) in.readObject();
            
            System.out.println("Serialization successful!");
        
            Enumeration en = book.addresses();
            while (en.hasMoreElements())
            {
                Address addr = (Address) en.nextElement();
                System.out.println(
                    "Name: [" + addr.getName() + "], " +
                    "Address: [" + addr.getAddress() + "]");
            }
        }
        catch(ClassNotFoundException ex)
        {
            ex.printStackTrace();
        }
        catch(IOException ex)
        {
            ex.printStackTrace();
        }
        finally
        {
            try
            {
                if (in != null)
                    in.close();
                if (fin != null)
                    fin.close();
            }
            catch(IOException ex)
            {   /* Do nothing */ }
        }
    }
}

which outputs the following:

Serialization successful!
Name: [Linus Torvalds], Address: [300 Linux Lane]
Name: [Scott McNealy], Address: [4000 Java Circle]
Name: [Bill Gates], Address: [1000 High-on-the-Hog Drive]
 
The page was last updated February 19, 2008