Serializable为标志性接口,当编译器看到对象实现了此接口,就表明此对象需要被序列化。
什么叫序列化:把一个Object直接转换成字节流写到硬盘上,或者写到网络上。
直接写Object的初衷:
当我们要磁盘中保存一个对象的时候,需要把对象的属性记录下来,比如一个正方形:长,宽,颜色,线条等属性,然后把这些属性值保存下来,
为什么不直接把对象保存下来,直接转化为字节流写到硬盘或者网络上
举例如下:
public class TestObjectIO {
public static void main(String args[]) throws Exception {
T t = new T();
t.k = 8;
FileOutputStream fos = new FileOutputStream("d:/share/java/io/testobjectio.dat");
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(t);
oos.flush();
oos.close();
FileInputStream fis = new FileInputStream("d:/share/java/io/testobjectio.dat");
ObjectInputStream ois = new ObjectInputStream(fis);
T tReaded = (T)ois.readObject();
System.out.println(tReaded.i + " " + tReaded.j + " " + tReaded.d + " " + tReaded.k);
}
}
class T implements Serializable
{
int i = 10;
int j = 9;
double d = 2.3;
transient int k = 15;
}
transient修饰的成员变量在序列化的时候不予考虑,网硬盘上写的时候,这个值不考虑,读出的时候就是默认的值,如上面的程序K的值开始时是15,读出的时候是0