Java I/O - 对象的输入输出与序列化

先说概念:

序列化是Java提供的一种将对象写入到输出流、并在之后将其读回的机制。

序列化:把内存中的java对象转换成与平台无关的二进制字节序列,以便永久保存在磁盘上或通过网络进行传输。

Java提供的对对象进行读写的流对象(即承载对象的媒介)为ObjectOutputStream 和 ObjectInputStream ,它们的作用就是把对象转换为字节序列,并承载这些序列,并提供了writeObject() 和 readObject() 方法对这些字节序列进行读写。

那么,如何实现对象的序列化与反序列化呢?

方法(一)

1、实现Serializable接口

如果某个类对象要被序列化,该类必须实现Serializable接口,只接口内无具体方法,所以只需要声明实现该接口,而无需实现具体方法。

public class Student implements Serializable { 
    …… }

2、通过ObjectOutputStream 类对象的writeObject(obj)方法,将obj参数指定的对象进行序列化,把得到的字节序列写到目标输出流中。

        ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("student.dat"));
        Student s = new Student();
        out.writeObject(s);
        out.close();

3、通过ObjInputStream类对象的readObject()方法从源输入流中读取字节序列,再反序列化为对象,并将其返回。

        //反序列化得到对象
        ObjectInputStream in = new ObjectInputStream(new FileInputStream("student.dat"));
        Student s1 = (Student) in.readObject();
        in.close();

以上是简单的对象序列化,会将对象的全部域都进行序列化,有时候对象的一些数据域只在本地有意义,对这样的数据进行序列化后存储或传输没有意义,甚至有时会在反序列化后使用对象时引起崩溃。所以,我们需要指定一些字段不需要序列化。

自定义序列化的字段

方法(一)使用transient关键字

在对未来会进行序列化的类进行定义时,使用transient关键字修饰无需序列化的字段。

方法(二)

方法(三)实现Externalizable接口

使用

如何实现序列化?

容易理解,序列化就是为了对对象进行

猜你喜欢

转载自www.cnblogs.com/Jing-Wang/p/10779261.html
今日推荐