`
daynight830
  • 浏览: 13785 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
最近访客 更多访客>>
社区版块
存档分类
最新评论

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。

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

分享到:
评论
1 楼 java.eye 2009-02-02  
[b][/b][i][/i][u][/u]
引用

    [*]

    [*]
[img][/img][url][/url][flash=200,200][/flash]asadas

相关推荐

Global site tag (gtag.js) - Google Analytics