Serializable 接口:
Serializable接口属于标志接口,这个接口没有任何的方法定义,它仅仅只是标记某个类能被序列化和反序列化。(接口不包含任何方法)
那么什么是序列化和反序列化呢?
定义:序列化 (Serialization)是将对象的状态信息转换为可以存储或传输的形式的过程。一般将一个对象存储至一个储存媒介,例如档案或是记亿体缓冲等。在网络传输过程中,可以是字节或是XML等格式。而字节的或XML编码格式可以还原完全相等的对象。这个相反的过程又称为反序列化。
额,很官方的说法。举个例子吧。JSON大家应该都熟悉吧。把一个Java对象变成一个JSON数据存储起来,这个过程叫序列化,然后把这个JSON数据变成Java对象,这个过程叫反序列化。当然,Java序列化不是Java对象变成JSON对象存储起来,它有自己的数据格式。不过原理是相似的。 简单说就是为了保存在内存中的各种对象的状态(也就是实例变量,不是方法),并且可以把保存的对象状态再读出来。Java给你提供的一种保存对象状态的机制,那就是序列化。
那么一个对象如何序列化和反序列化呢?
序列化的步骤:
首先要创建某些OutputStream(父类)对象:OutputStream outputStream = new FileOutputStream("output.txt")
将其封装到ObjectOutputStream对象内:ObjectOutputStream objectOutputStream = new ObjectOutputStream(outputStream);
此后只需调用writeObject()即可完成对象的序列化,并将其发送给OutputStream:objectOutputStream.writeObject(Object);
最后不要忘记关闭资源:objectOutputStream.close(), outputStream .close();
反序列化的步骤:
首先要创建某些InputStream(父类)对象:InputStream inputStream= new FileInputStream("output.txt")
将其封装到ObjectInputStream对象内:ObjectInputStream objectInputStream= new ObjectInputStream(inputStream);
此后只需调用readObject()即可完成对象的反序列化:objectInputStream.readObject();
最后不要忘记关闭资源:objectInputStream.close(),inputStream.close();
至于序列化的具体细节,这里暂不描述(序列化ID,静态属性,Transient关键字,父子类序列化等)
网友评论