ObjectInputStream
The Java ObjectInputStream
class (java.io.ObjectInputStream
) enables you to read Java objects from an InputStream
instead of just raw bytes. You wrap an InputStream
in a ObjectInputStream
and then you can read objects from it. Of course the bytes read must represent a valid, serialized Java object. Otherwise reading objects will fail.
Normally you will use the ObjectInputStream
to read objects written (serialized) by a Java ObjectOutputStream
. You will see an example of that later.
ObjectInputStream Example
Here is a Java ObjectInputStream
example:
ObjectInputStream objectInputStream =
new ObjectInputStream(new FileInputStream("object.data"));
MyClass object = (MyClass) objectInputStream.readObject();
//etc.
objectInputStream.close();
For this ObjectInputStream
example to work the object you read must be an instance of MyClass
, and must have been serialized into the file "object.data" via an ObjectOutputStream
.
Before you can serialize and de-serialize objects the class of the object must implement java.io.Serializable
. For more info, see Java Serializable.
Using an ObjectInputStream With an ObjectOutputStream
I promised earlier to show you an example of using the Java ObjectInputStream
with the ObjectOutputStream
. Here is that example:
import java.io.*;
public class ObjectInputStreamExample {
public static class Person implements Serializable {
public String name = null;
public int age = 0;
}
public static void main(String[] args) throws IOException, ClassNotFoundException {
ObjectOutputStream objectOutputStream =
new ObjectOutputStream(new FileOutputStream("data/person.bin"));
Person person = new Person();
person.name = "Jakob Jenkov";
person.age = 40;
objectOutputStream.writeObject(person);
objectOutputStream.close();
ObjectInputStream objectInputStream =
new ObjectInputStream(new FileInputStream("data/person.bin"));
Person personRead = (Person) objectInputStream.readObject();
objectInputStream.close();
System.out.println(personRead.name);
System.out.println(personRead.age);
}
}
This example first creates an ObjectOutputStream
connected to a FileOutputStream
. Then it creates a Person
object and writes it to the ObjectOutputStream
, and then closes the ObjectOutputStream
.
Then the example creates an ObjectInputStream
connected to the same file the ObjectOutputStream
was connected to. The example then reads in an object from the ObjectInputStream
and casts it to a Person
object. After that the ObjectInputStream
is also closed, and the values read into the Person
object are printed to System.out
.
The output printed from running this example should be:
Jakob Jenkov
40
Last updated
Was this helpful?