Java Fundamental Classes Reference

Previous Chapter 11
The java.io Package
Next
 

ObjectInputStream

Name

ObjectInputStream

Synopsis

Class Name:

java.io.ObjectInputStream

Superclass:

java.io.InputStream

Immediate Subclasses:

None

Interfaces Implemented:

java.io.ObjectInput

Availability:

New as of JDK 1.1

Description

The ObjectInputStream class can read both primitive types and object instances from an underlying InputStream. The objects and other data must have been written by an ObjectOutputStream. These two classes can provide persistent storage of objects when they are used in conjunction with FileInputStream and FileOutputStream. The classes can also be used with socket streams to pass objects across the network.

Only objects that are instances of classes that implement the Serializable or Externalizable interfaces can be deserialized from an input stream. The default deserialization mechanism is implemented by readObject(). When an object is deserialized, the non-static and non-transient fields of the object are restored to the values they had when the object was serialized, including any other objects referenced by the object (except for those objects that do not implement the Serializable interface themselves). Graphs of objects are restored using a reference sharing mechanism. New object instances are always allocated during the deserialization process, to prevent existing objects from being overwritten. Deserialized objects are returned as instances of type Object, so they should be cast to the appropriate type. Strings and arrays are objects in Java, so they are treated as objects during deserialization.

For example, the following code opens a file called color.ser and reads a Color object:

FileInputStream fileIn;
ObjectInputStream in;
Color color;
try {
    fileIn = new FileInputStream("color.ser");
    in = new ObjectInputStream(fileIn);
    color = (Color)in.readObject();
    in.close();
}
catch (Exception e) {
    System.out.println("Error reading: " + e);
}

Classes that have transient instance variables may require special handling to reconstruct the values of these variables when objects are deserialized. Special handling may also be necessary to correctly deserialize objects that were serialized with a different version of their class than is in use when they are deserialized. Classes that require special handling during serialization and deserialization must implement the following methods (with these exact signatures):

private void readObject(ObjectOutputStream stream) 
             throws IOException, ClassNotFoundException
private void writeObject(ObjectOutputStream stream) throws IOException

The writeObject() method is responsible for writing the state of the object for the particular class so that it can be restored by readObject(). The readObject() method registers an object validation callback by calling registerValidation() as its first action. The readObject() method doesn't need to handle reading the state for the object's superclass or any of its subclasses except in the case where the superclass doesn't itself implement the Serializable interface. In this case, the nonserializable class must have a no-argument constructor that can be called to initialize its fields, and it is the responsibility of the subclass to restore the state of its superclass.

A class that inherits the implementation of Serializable prevents itself from being serialized by defining readObject() and writeObject() methods that throw NotSerializableException objects.

If a class needs complete control over the contents and formatting of the serialized form of its objects, it should implement the Externalizable interface.

Class Summary

public class java.io.ObjectInputStream extends java.io.InputStream
             implements java.io.ObjectInput {
  // Constructors
  public ObjectInputStream(InputStream in);
  // Public Instance Methods
  public int available();
  public void close();
  public final void defaultReadObject();
  public int read();
  public int read(byte[] data, int offset, int length);
  public boolean readBoolean();
  public byte readByte();
  public char readChar();
  public double readDouble();
  public float readFloat();
  public void readFully(byte[] data);
  public void readFully(byte[] data, int offset, int size);
  public int readInt();
  public String readLine();
  public long readLong();
  public final Object readObject();
  public short readShort();
  public int readUnsignedByte();
  public int readUnsignedShort();
  public String readUTF();
  public synchronized void 
         registerValidation(ObjectInputValidation obj, int prio);
  public int skipBytes(int len);
  // Protected Instance Methods
  protected final boolean enableResolveObject(boolean enable);
  protected void readStreamHeader();
  protected Class resolveClass(ObjectStreamClass v);
  protected Object resolveObject(Object obj);
}

Constructors

ObjectInputStream

 public ObjectInputStream(InputStream in) throws IOException, StreamCorruptedException 

Parameters

in

The underlying input stream.

Throws

IOException

If any kind of I/O error occurs.

StreamCorruptedException

If the stream header is not correct.

Description

This constructor creates an ObjectInputStream that reads from the given input stream. The constructor attempts to read the stream header, which consists of a magic number and a version number, and if something goes wrong, an appropriate exception is thrown. If all of the bytes of the stream header are not available, the constructor does not return until they become available.

Public Instance Methods

available

public int available() throws IOException

Returns

The number of bytes that can be read without blocking.

Throws

IOException

If any kind of I/O error occurs.

Implements

ObjectInput.available()

Overrides

InputStream.available()

Description

This method returns the number of bytes that can be read without having to wait for more data to become available.

close

public void close() throws IOException

Throws

IOException

If any kind of I/O error occurs.

Implements

ObjectInput.close()

Overrides

InputStream.close()

Description

This method closes the stream and releases any system resources that are associated with it.

defaultReadObject

 public final void defaultReadObject() throws IOException, ClassNotFoundException, NotActiveException 

Throws

IOException

If any kind of I/O error occurs.

ClassNotFoundException

If the class of the object being read cannot be found.

NotActiveException

If serialization is not active.

Description

This method reads the fields of the current object that are not static and not transient. The method can only be called from the private readObject() method of an object that is being deserialized; it throws a NotActiveException if it is called at any other time. This method implements the default deserialization mechanism.

read

public int read() throws IOException

Returns

The next byte of data or -1 if the end of the stream is encountered.

Throws

IOException

If any kind of I/O error occurs.

Implements

ObjectInput.read()

Overrides

InputStream.read()

Description

This method reads the next byte from the stream. The method blocks until some data is available, the end of the stream is detected, or an exception is thrown.

 public int read(byte[] data, int offset, int length) throws IOException 

Parameters

data

Array of bytes to be filled from the stream.

offset

An offset into the byte array.

length

The number of bytes to read.

Returns

The number of bytes read or -1 if the end of the stream is encountered immediately.

Throws

IOException

If any kind of I/O error occurs.

Implements

ObjectInput.read(byte[], int, int)

Overrides

InputStream.read(byte[], int, int)

Description

This method reads up to length bytes of input into the given array starting at index offset. The method blocks until there is some input available.

readBoolean

public boolean readBoolean() throws IOException

Returns

The boolean value read from the stream.

Throws

EOFException

If the end of the file is encountered.

IOException

If any other kind of I/O error occurs.

Implements

DataInput.readBoolean()

Description

This method reads a byte as a boolean value from the underlying input stream. A byte that contains a zero is read as false. A byte that contains any other value is read as true. The method blocks until the byte is read, the end of the stream is encountered, or an exception is thrown.

readByte

public byte readByte() throws IOException

Returns

The byte value read from the stream.

Throws

EOFException

If the end of the file is encountered.

IOException

If any other kind of I/O error occurs.

Implements

DataInput.readByte()

Description

This method reads a signed 8-bit value, a byte, from the underlying input stream. The method blocks until the byte is read, the end of the stream is encountered, or an exception is thrown.

readChar

public char readChar() throws IOException

Returns

The char value read from the stream.

Throws

EOFException

If the end of the file is encountered.

IOException

If any other kind of I/O error occurs.

Implements

DataInput.readChar()

Description

This method reads a 16-bit Unicode character from the stream. The method reads two bytes from the underlying input stream and then creates a char value using the first byte read as the most significant byte. The method blocks until the two bytes are read, the end of the stream is encountered, or an exception is thrown.

readDouble

public double readDouble() throws IOException

Returns

The double value read from the stream.

Throws

EOFException

If the end of the file is encountered.

IOException

If any other kind of I/O error occurs.

Implements

DataInput.readDouble()

Description

This method reads a 64-bit double quantity from the stream. The method reads a long value from the underlying input stream as if using the readLong() method. The long value is then converted to a double using the longBitsToDouble() method in Double. The method blocks until the necessary eight bytes are read, the end of the stream is encountered, or an exception is thrown.

readFloat

public float readFloat() throws IOException

Returns

The float value read from the stream.

Throws

EOFException

If the end of the file is encountered.

IOException

If any other kind of I/O error occurs.

Implements

DataInput.readFloat()

Description

This method reads a 32-bit float quantity from the stream. The method reads an int value from the underlying input stream as if using the readInt() method. The int value is then converted to a float using the intBitsToFloat() method in Float. The method blocks until the necessary four bytes are read, the end of the stream is encountered, or an exception is thrown.

readFully

public void readFully(byte[] b) throws IOException

Parameters

b

The array to fill.

Throws

EOFException

If the end of the file is encountered.

IOException

If any other kind of I/O error occurs.

Implements

DataInput.readFully(byte[])

Description

This method reads bytes into the given array b until the array is full. The method reads repeatedly from the underlying stream to fill the array. The method blocks until all of the bytes are read, the end of the stream is encountered, or an exception is thrown.

 public void readFully(byte[] data, int offset, int size) throws IOException 

Parameters

data

The array to fill.

offset

An offset into the array.

length

The number of bytes to read.

Throws

EOFException

If the end of the file is encountered.

IOException

If any other kind of I/O error occurs.

Implements

DataInput.readFully(byte[], int, int)

Description

This method reads len bytes into the given array, starting at offset off. The method reads repeatedly from the underlying stream to fill the array. The method blocks until all of the bytes are read, the end of the stream is encountered, or an exception is thrown.

readInt

public int readInt() throws IOException

Returns

The int value read from the stream.

Throws

EOFException

If the end of the file is encountered.

IOException

If any other kind of I/O error occurs.

Implements

DataInput.readInt()

Description

This method reads a signed 32-bit int quantity from the stream. The method reads four bytes from the underlying input stream and then creates an int quantity, using the first byte read as the most significant byte. The method blocks until the four bytes are read, the end of the stream is encountered, or an exception is thrown.

readLine

public String readLine() throws IOException

Returns

A String that contains the line read from the stream.

Throws

EOFException

If the end of the file is encountered.

IOException

If any other I/O error occurs.

Implements

DataInput.readLine()

Description

This method reads the next line of text from the stream. The method reads bytes of data from the underlying input stream until it encounters a line terminator. A line terminator is a carriage return ("\r"), a newline character ("\n"), a carriage return immediately followed by a newline character, or the end of the stream. The method blocks until a line terminator is read, the end of the stream is encountered, or an exception is thrown. Note that this method calls the readLine() method of DataInputStream, which is deprecated in 1.1.

readLong

public long readLong() throws IOException

Returns

The long value read from the stream.

Throws

EOFException

If the end of the file is encountered.

IOException

If any other kind of I/O error occurs.

Implements

DataInput.readLong()

Description

This method reads a signed 64-bit long quantity from the stream. The method reads eight bytes from the underlying input stream and then creates a long quantity, using the first byte read as the most significant byte. The method blocks until the eight bytes are read, the end of the stream is encountered, or an exception is thrown.

readObject

 public final Object readObject() throws OptionalDataException, ClassNotFoundException, IOException 

Returns

An Object that has been deserialized from the stream.

Throws

ClassNotFoundException

If the object being deserialized has an unrecognized class.

InvalidClassException

If there is a problem with the class of the deserialized object.

StreamCorruptedException

If the stream serialization information is not correct.

OptionalDataException

If the stream contains primitive data instead of an object.

IOException

If any kind of I/O error occurs.

Implements

ObjectInput.readObject()

Description

This method deserializes an object from the stream and returns a reference to the object. The non-static and non-transient fields of the object are restored to the values they had when the object was serialized. If the object contains references to other objects, these objects are also deserialized (as long as they implement the Serializable interface). Graphs of objects are restored using a reference-sharing mechanism. New object instances are always allocated during the deserialization process, to prevent existing objects from being overwritten. Deserialized objects are returned as instances of type Object, so they should be cast to the appropriate type.

Once an object has been completely restored (i.e., all of its fields and any objects it references have been restored), any object validation callbacks for the object or any of the objects it references are called in an order based on their priority. An object validation callback is registered by the private readObject() method for an object.

readShort

public short readShort() throws IOException

Returns

The short value read from the stream.

Throws

EOFException

If the end of the file is encountered.

IOException

If any other kind of I/O error occurs.

Implements

DataInput.readShort()

Description

This method reads a signed 16-bit short quantity from the stream. The method reads two bytes from the underlying input stream and then creates a short quantity, using the first byte read as the most significant byte. The method blocks until the two bytes are read, the end of the stream is encountered, or an exception is thrown.

readUnsignedByte

public int readUnsignedByte() throws IOException

Returns

The unsigned byte value read from the stream.

Throws

EOFException

If the end of the file is encountered.

IOException

If any other kind of I/O error occurs.

Implements

DataInput.readUnsignedByte()

Description

This method reads an unsigned 8-bit quantity from the stream. The method reads a byte from the underlying input stream and returns that byte. The method blocks until the byte is read, the end of the stream is encountered, or an exception is thrown.

readUnsignedShort

public int readUnsignedShort() throws IOException

Returns

The unsigned short value read from the stream.

Throws

EOFException

If the end of the file is encountered.

IOException

If any other kind of I/O error occurs.

Implements

DataInput.readUnsignedShort()

Description

This method reads an unsigned 16-bit quantity from the stream. The method reads two bytes from the underlying input stream and creates an unsigned short quantity using the first byte read as the most significant byte. The method blocks until the two bytes are read, the end of the stream is encountered, or an exception is thrown.

readUTF

public String readUTF() throws IOException

Returns

The String read from the stream.

Throws

EOFException

If the end of the file is encountered.

IOException

If any other kind of I/O error occurs.

UTFDataFormatException

If the bytes do not represent a valid UTF-8 encoding.

Implements

DataInput.readUTF()

Description

This method reads a UTF-8 encoded string from the stream. See the description of DataInputStream.readUTF(DataInput) for more information.

registerValidation

 public synchronized void registerValidation( ObjectInputValidation obj, int prio) throws NotActiveException, InvalidObjectException 

Parameters

obj

The object requesting validation.

prio

The priority of the validation callback; use zero as a default.

Throws

NotActiveException

If serialization is not active.

InvalidObjectException

If obj is null.

Description

This method may be called from an object's private readObject() method to register a validation callback. An object performs internal validation by implementing the ObjectInputValidation interface and registering itself with the ObjectInputStream via this function. When ObjectInputStream has completely deserialized an object (i.e., restored all of its fields and any objects it references), the stream calls ObjectInputValidation.validateObject() for every object that has an object validation callback. Objects that register with higher priority values get validated before objects that register with lower priority values. Within a priority value, the callbacks are not processed in any particular order.

skipBytes

public int skipBytes(int len) throws IOException

Parameters

len

The number of bytes to skip.

Returns

The actual number of skipped bytes.

Throws

EOFException

If the end of the file is encountered.

IOException

If any other kind I/O error occurs.

Implements

DataInput.skipBytes()

Description

This method skips over n bytes in the underlying input stream. The method blocks until all of the bytes are skipped, the end of the stream is encountered, or an exception is thrown.

Protected Instance Methods

enableResolveObject

 protected final boolean enableResolveObject(boolean enable) throws SecurityException 

Parameters

enable

A boolean value that specifies whether or not object replacement is enabled.

Returns

true if object replacement was previously enabled; false otherwise.

Throws

SecurityException

If enable is true and getClassLoader() called on the class of the stream does not return null.

Description

This method determines if a trusted subclass of ObjectInputStream is allowed to replace deserialized objects. If the method is called with true, object replacement is enabled. Each time an object is deserialized, resolveObject() is called to give the ObjectInputStream a chance to replace the object. A trusted stream is one whose class has no ClassLoader.

readStreamHeader

 protected void readStreamHeader() throws IOException, StreamCorruptedException 

Throws

StreamCorruptedException

If the stream header is not correct.

IOException

If any kind of I/O error occurs.

Description

This method attempts to read the stream header, which consists of a magic number and a version number. If something goes wrong, an appropriate exception is thrown. This method is called by the constructor for ObjectInputStream and is the source of the exceptions it throws. If you subclass ObjectInputStream, you can override this method to provide your own stream header checking.

resolveClass

 protected Class resolveClass(ObjectStreamClass v) throws IOException, ClassNotFoundException 

Parameters

v

The ObjectStreamClass to be resolved.

Returns

The Class that corresponds to the given ObjectStreamClass.

Throws

ClassNotFoundException

If the class of the given ObjectStreamClass cannot be found.

IOException

If any kind of I/O error occurs.

Description

This method attempts to find the Class object that corresponds to the supplied ObjectStreamClass. When a object is deserialized, its class information is read into an ObjectStreamClass object, which is then resolved to a Class if possible. Subclasses of ObjectInputStream can override this method to allow classes to be fetched from alternate sources. The version of the ObjectStreamClass and the Class must match.

resolveObject

protected Object resolveObject(Object obj) throws IOException

Parameters

obj

The object to be replaced.

Returns

A replacement for the given object.

Throws

IOException

If any kind of I/O error occurs.

Description

If object replacement is enabled for this ObjectInputStream (see enableResolveObject()), this method is called with each deserialized object to give the stream a chance to replace the object. In ObjectInputStream, this method simply returns the object that was passed to it. Subclasses can override this method to provide more useful functionality.

Inherited Methods

Method Inherited From Method Inherited From

clone()

Object

equals(Object)

Object

finalize()

Object

getClass()

Object

hashCode()

Object

mark()

InputStream

markSupported()

InputStream

notify()

Object

notifyAll()

Object

read(byte[])

InputStream

reset()

InputStream

skip(long n)

InputStream

toString()

Object

wait()

Object

wait(long)

Object

wait(long, int)

Object

See Also

Class, ClassNotFoundException, DataInput, Double, EOFException, Externalizable, Float, InputStream, InvalidClassException, IOException, NotActiveException, ObjectInput, ObjectInputValidation, ObjectOuputStream, ObjectStreamClass, OptionalDataException, SecurityException, Serializable, StreamCorruptedException, String, UTFDataFormatException


Previous Home Next
ObjectInput Book Index ObjectInputValidation

Java in a Nutshell Java Language Reference Java AWT Java Fundamental Classes Exploring Java