We know earlier in "What is Serialization?", to write an object to a file, the object must be serialized. For this reason, the Student class was serialized in "Java Serialization Example" and then Student objects are written to a file. It is all okay, but if would like to write a string to a file or a Date object to a file or a Vector object to a file, then who will serialize them; they are all predefined classes bundled with Java API packages.
To overcome this difficulty, the Java designers already Serialized many classes and supplied to us so that the programmer can write them to a file or send across network. Let us see some class signatures of Java API classes.
- public final class java.lang.String implements java.io.Serializable, java.lang.Comparable, java.lang.CharSequence
- public class java.util.Date implements java.io.Serializable, java.lang.Cloneable, java.lang.Comparable
- public class java.util.Vector extends java.util.AbstractList implements java.util.List, java.util.RandomAccess, java.lang.Cloneable, java.io.Serializable
Let us write an application on serialization where Java API class objects(like String, Date, Integer etc.) and some primitive data types (like int, long etc.) are written to a file and then read back. Two programs exist.
- UsingWriteMethods.java : Writes to a file the object like Vector, Date, String, Integer and data types like int, double, long etc.
- UsingReadMethods.java : Reads from the file, all the data written by UsingWriteMethods.java
1st Program File Name: UsingWriteMethods.java
import java.io.*;
import java.util.*;
public class UsingWriteMethods
{
public static void main(String args[])
{
try
{
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("abc.txt"));
String str1 = "Hello";
oos.writeUTF(str1);
oos.writeObject(new Integer(10));
oos.writeObject(new Date());
oos.writeInt(100);
oos.writeDouble(20.5);
oos.writeLong(200L);
Vector vect1 = new Vector();
vect1.addElement("Sir");
vect1.addElement(500);
oos.writeObject(vect1);
oos.close();
}
catch(IOException e)
{
e.printStackTrace();
}
}
}
2nd Program File Name: UsingReadMethods.java
import java.io.*;
import java.util.*;
public class UsingReadMethods
{
public static void main(String args[])
{
try
{
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("abc.txt"));
System.out.println(ois.readUTF()); // to read string
System.out.println(ois.readObject()); // to read Integer object
System.out.println(ois.readObject()); // to read Date object
System.out.println(ois.readInt()); // to read int
System.out.println(ois.readDouble()); // to read double
System.out.println(ois.readLong()); // to read long
Vector vect2 = (Vector) ois.readObject(); // to read Vector object
System.out.println(vect2.firstElement());
System.out.println(vect2.lastElement());
ois.close();
}
catch(ClassNotFoundException e)
{
e.getMessage();
}
catch(IOException e)
{
System.out.println(e);
}
}
}
The writing and reading methods of object streams are shown in Java API classes supporting Serialization.
Learn the variations of getMessage() & printStackTrace().
Hi Sir,
In the above implicit serialization example,when youread the integer,vector objects using ois.readObject(),we have not specified the order.That is,the first readObject() myt retrieve the Integer object stored rather than the Date object.So how can we ensure the order?
Or is the retrieval order should be same as storage?