What does Serializable mean? What does Serializable mean? java java

What does Serializable mean?


Serialization is persisting an object from memory to a sequence of bits, for instance for saving onto the disk. Deserialization is the opposite - reading data from the disk to hydrate/create an object.

In the context of your question, it is an interface that if implemented in a class, this class can automatically be serialized and deserialized by different serializers.


Though most of the users have already given the answer, but I would like to add an example for those who need it in order to explain the idea:

Let's say you have a class person like the following:

public class Person implements java.io.Serializable {    /**     *      */    private static final long serialVersionUID = 1L;    public String firstName;    public String lastName;    public int age;    public String address;    public void play() {        System.out.println(String.format(                "If I win, send me the trophy to this address: %s", address));    }    @Override    public String toString() {        return String.format(".....Person......\nFirst Name = %s\nLast Name = %s", firstName, lastName);    }}

and then you create an object like this:

Person william = new Person();        william.firstName = "William";        william.lastName = "Kinaan";        william.age = 26;        william.address = "Lisbon, Portugal";

You can serialise that object to many streams. I will do that to two streams:

Serialization to standard output:

public static void serializeToStandardOutput(Person person)            throws IOException {        OutputStream outStream = System.out;        ObjectOutputStream stdObjectOut = new ObjectOutputStream(outStream);        stdObjectOut.writeObject(person);        stdObjectOut.close();        outStream.close();    }

Serialization to a file:

public static void serializeToFile(Person person) throws IOException {        OutputStream outStream = new FileOutputStream("person.ser");        ObjectOutputStream fileObjectOut = new ObjectOutputStream(outStream);        fileObjectOut.writeObject(person);        fileObjectOut.close();        outStream.close();    }

Then:

Deserialize from file:

public static void deserializeFromFile() throws IOException,            ClassNotFoundException {        InputStream inStream = new FileInputStream("person.ser");        ObjectInputStream fileObjectIn = new ObjectInputStream(inStream);        Person person = (Person) fileObjectIn.readObject();        System.out.println(person);        fileObjectIn.close();        inStream.close();    }


It means that instances of the class can be turned into a byte-stream (for example, to be saved to a file) and then converted back into classes again. This reloading could happen in a different instance of the program, or even on a different machine. Serialisation (in any language) involves all sorts of issues, though, especially when you've got references to other objects inside the serialisable one.