java序列化学习笔记

废话不多说,马上开始。
将一个对象的状态写如一个byte流里,并可以到其它地方读取这个byte流的数据,重新构造一个相同的对象。此乃java的序列化。这种机制允许你将对象通过网络进行传播,并可以随时把对象持久到DB,文件中。是RMI,EJB,JNDI等的基础技术。

如何序列化?
只有实现了java.io.Serializable接口的类才能被序列化!
那么如何实现序列化对象的持久化呢?
如果要把一个可序列化的对象序列化到文件或者数据库中,需要java.io.ObjectOutputStream的支持,例子如下:
FileOutputStream fos = new FileOutputStream(args[0]);
ObjectOutputStream oos = new ObjectOutputStream(fos);
ClassA c = new ClassA();
oos.writeObject(c);
当对象不能被序列化时,会抛出java.io.NotSerializableException。


恢复一个对象:
java.io.ObjectInputStream
FileInputStream fis = new FileInputStream(args[0]);
ObjectInputStream ois = new ObjectInputStream(fis);
Object O = ois.readObject();

序列化的原则:
并不是实现序列化的类中所有的属性和方法都可以被自动的序列化。
1.父类没有实现序列化,子类序列化时,继承父类的属性和方法则不会被序列化。
2.static类型不能被序列化。  why?
3.transient关键字修饰的属性和方法不能被序列化。因此有时候有些属性或方法不想被序列化时,可以用transient将其限制。

那么一般什么属性最好不要被序列化呢?
1.线程的相关属性。
2.要访问IO,本地资源,网络资源的属性。
3.没有实现序列化的属性
既没有实现序列化,又没有用transient标识的,会抛出NotSerializableException。

说到这里序列化基本的知识其实也差不多了,但是序列化还远远不仅仅如此!序列化真正的运用当中还有很多东西,但是因为涉及到虚拟机方面知识,而这些我又不甚了解,所以更多的东西还没有办法记录下来了,以后要用的时候再学把。

你可能感兴趣的:(java,c,虚拟机,ejb,Flash)