1、Object流:直接将Object写入或读出。
2、序列化:将Object直接转化成字节流写到硬盘或网络上。
3、如果想把一个对象转化成字节流,该对象的实体类必须得实现Serializable接口,Serializable接口是标记性接口,它并没有任何方法,只是用于标识该类可以被序列化。
4、transient关键字,用于修饰成员变量,表示该成员变量是透明的,与Serializable接口同用,表示序列化的时候不考虑该成员变量。序列化时存的是该成员变量数据类型的默认值。
5、Externalizable接口是Serializable接口的子类,实现Serializable接口JDK会帮助控制如何序列化的过程,而实现Externalizable接口就可以自己控制序列化的实现过程。
该接口有两个方法:readExternal(ObjectInput in);把对象通过ObjectInput 读进来。
writeExternal(ObjectOutput out);把对象通过ObjectOutput 写出去。
一般来说就让JDK实现就好了,这个接口不常用。
练习小例子:
package test.io.object;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
public class ObjectStreamTest {
public static void main(String args[]){
FileOutputStream fos = null;
ObjectOutputStream oos = null;
FileInputStream fis = null;
ObjectInputStream ois = null;
try {
fos = new FileOutputStream("E:/技术学习/java/test/Socket/objectTest.txt");
oos = new ObjectOutputStream(fos);
Stu s = new Stu();
s.school = "dd";
oos.writeObject(s);
fis = new FileInputStream("E:/技术学习/java/test/Socket/objectTest.txt");
ois = new ObjectInputStream(fis);
Stu s2 = (Stu) ois.readObject();
System.out.print(s2.old + " " + s2.school + " " + s2.name + " " +s2.teacher);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
class Stu implements Serializable{
private static final long serialVersionUID = 1L;
int old = 25;
String name = "bjh";
transient String teacher = "cj";
String school = "lgd";
}
运行结果:
25 dd bjh null