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。
说到这里序列化基本的知识其实也差不多了,但是序列化还远远不仅仅如此!序列化真正的运用当中还有很多东西,但是因为涉及到虚拟机方面知识,而这些我又不甚了解,所以更多的东西还没有办法记录下来了,以后要用的时候再学把。
发表评论
- 浏览: 6099 次
- 性别:

- 来自: 武汉

- 详细资料
搜索本博客
最新评论
-
借你一个微笑(转)
如果你是他,你会记得微笑吗?
-- by daynight830 -
大家知道"a man of woman" ...
...
-- by wx_hello -
没有雨伞的孩子必须努力奔 ...
加油把!兄弟姐妹们!
-- by daynight830 -
没有雨伞的孩子必须努力奔 ...
风雨过后终会有彩虹,虽然我一直觉得生活中彩虹出现的几率几乎很小,但是还是很期待~ ...
-- by elfer -
没有雨伞的孩子必须努力奔 ...
我们决定不了过去,但我们可以选择未来……
-- by 笨笨熊






评论排行榜