Java I/O - 对象的输入输出与序列化
Posted jing-wang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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接口
使用
如何实现序列化?
容易理解,序列化就是为了对对象进行
以上是关于Java I/O - 对象的输入输出与序列化的主要内容,如果未能解决你的问题,请参考以下文章