简述java序列化(Serializable)

将一个对象的状态写如一个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.ObjectInputStreamFileInputStream 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。说到这里序列化基本的知识其实也差不多了,但是序列化还远远不仅仅如此!序列化真正的运用当中还有很多东西,还涉及到虚拟机方面知识,以后好好研究下
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值