ObjectInputStream readObject() in Java

readObject(): This method is available in the java.io.ObjectInputStream class of Java.

Syntax:

Object java.io.ObjectInputStream.readObject() throws IOException, ClassNotFoundException

This method read an object from the ObjectInputStream. The class of the object, the signature of the class, and the values of the non-transient and non-static fields of the class and all of its super types are read. Default deserializing for a class can be overridden using the write object and readObject methods.

Objects referenced by this object are read transitively so that a complete equivalent graph of objects is reconstructed by readObject.

The root object is completely restored when all of its fields and the objects it references are completely restored.

Parameters: NA

Returns: the object read from the stream.

Throws:

1. ClassNotFoundException - The class of a serialized object cannot be found.

2. InvalidClassException - Something is wrong with a class used by serialization.

3. StreamCorruptedException - Control information in the stream is inconsistent.

4. OptionalDataException - Primitive data was found in the stream instead of objects.

5. IOException - Any of the usual Input/Output related exceptions.

Approach 1: StreamCorruptedException 

Java

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectInputStream;

public class ObjectInputStreamreadObject {
    public static void main(String[] args)
throws IOException, ClassNotFoundException {

        InputStream in = new FileInputStream("D:\\hell.txt");
        ObjectInputStream objectInputStream =
new ObjectInputStream(in);

        System.out.println(objectInputStream.readObject());

        objectInputStream.close();

    }
}

Output:

Exception in thread "main" java.io.StreamCorruptedException: invalid stream header: 61686861 at java.base/java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:966) at java.base/java.io.ObjectInputStream.<init>(ObjectInputStream.java:405)


Approach 2: OptionalDataException 

Java

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectInputStream;

public class ObjectInputStreamreadObject {
    public static void main(String[] args)
throws IOException, ClassNotFoundException {

        InputStream in = new FileInputStream("D:\\hello.txt");
        ObjectInputStream objectInputStream =
new ObjectInputStream(in);

        System.out.println(objectInputStream.readObject());

        objectInputStream.close();

    }
}

Output:

Exception in thread "main" java.io.OptionalDataException at java.base/java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1727) at java.base/java.io.ObjectInputStream.readObject(ObjectInputStream.java:519) at java.base/java.io.ObjectInputStream.readObject(ObjectInputStream.java:477)


Approach 3: IOException 

Java

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectInputStream;

public class ObjectInputStreamreadObject {
    public static void main(String[] args)
throws IOException, ClassNotFoundException {

        InputStream in = new FileInputStream("D:\\hello.txt");
        ObjectInputStream objectInputStream =
new ObjectInputStream(in);

        objectInputStream.close();
        System.out.println(objectInputStream.readObject());

    }
}

Output:

Exception in thread "main" java.io.IOException: Stream Closed at java.base/java.io.FileInputStream.read0(Native Method) at java.base/java.io.FileInputStream.read(FileInputStream.java:223) at java.base/java.io.ObjectInputStream$PeekInputStream.peek(ObjectInputStream.java:2892) at java.base/java.io.ObjectInputStream$BlockDataInputStream.peek(ObjectInputStream.java:3219) at java.base/java.io.ObjectInputStream$BlockDataInputStream.peekByte(ObjectInputStream.java:3229) at java.base/java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1663) at java.base/java.io.ObjectInputStream.readObject(ObjectInputStream.java:519) at java.base/java.io.ObjectInputStream.readObject(ObjectInputStream.java:477)


Some more methods of ObjectInputStream

available(): This method returns the number of bytes that can be read without blocking.

close(): This method closes the input stream. Must be called to release any resources associated with the stream.

defaultReadObject(): This method read the non-static and non-transient fields of the current class from this stream.

getObjectInputFilter(): This method returns the serialization filter for this stream.

read(): This method reads a byte of data.

read(byte[], int, int): This method reads into an array of bytes.

readBoolean(): This method reads in a boolean.

readByte(): This method reads an 8-bit byte.

readChar(): This method reads a 16-bit char.

readDouble(): This method reads a 64-bit double.

readFields(): This method reads the persistent fields from the stream and makes them available by name.

readFloat(): This method reads a 32-bit float.

readFully(byte[]): This method reads bytes, blocking until all bytes are read.

readFully(byte[], int, int): This method reads bytes, blocking until all bytes are read.

readInt(): This method reads a 32-bit int.

readLong(): This method reads 64-bit long.

readShort(): This method reads a 16-bit short.

readUnshared(): This method reads an "unshared" object from the ObjectInputStream.

readUnsignedByte(): This method reads an unsigned 8-bit byte.

readUnsignedShort(): This method reads an unsigned 16-bit short.

readUTF(): This method reads a String in modified UTF-8 format.

registerValidation(ObjectInputValidation, int): This method registers an object to be validated before the graph is returned.

setObjectInputFilter(ObjectInputFilter): This method set the serialization filter for the stream.

skipBytes(int): This method skips bytes.

No comments:

Post a Comment