当前位置: 技术问答>java相关
Serializable 的作用?
来源: 互联网 发布时间:2015-11-20
本文导语: Serializable 在实际应用用处? | 如果您问的是这个接口java.io.Serializable的用处,而不是串行化本身的用处的话,请继续读: java.io.Serializable是一个空接口,也就是说这个接口没有声明任何的方...
Serializable 在实际应用用处?
|
如果您问的是这个接口java.io.Serializable的用处,而不是串行化本身的用处的话,请继续读:
java.io.Serializable是一个空接口,也就是说这个接口没有声明任何的方法,所以实现这个接口的类也就不需要实现任何的方法。
那么这个接口还有什么用处呢?
这个接口使得所有的实现它的类具有一个特殊的(mixin)类型,从而使JVM知道这个类可以安全地串行化。
这种没有声明任何方法的接口,叫做标示接口(marker interface)。标示接口是一种设计模式,感兴趣的读者可以参见我的书《Java与模式》
阎宏博士,写于纽约
《Java与模式》作者
电子信箱:javapatterns@yahoo.com
个人网站http://www.WebEndsHere.com
或者http://218.6.168.109/jeffyan77/(中国临时使用))
或者http://webendshere.nstemp.com(美国临时使用)
个人作品集http://www.yesky.com/20011108/203866.shtml
买书请到:
http://www.china-pub.com/computers/common/info.asp?id=8182
http://www.huachu.com.cn/itbook/itbookinfo.asp?lbbh=BB07630282
http://www.cnforyou.com/query/bookdetail.asp?viBookCode=7638
java.io.Serializable是一个空接口,也就是说这个接口没有声明任何的方法,所以实现这个接口的类也就不需要实现任何的方法。
那么这个接口还有什么用处呢?
这个接口使得所有的实现它的类具有一个特殊的(mixin)类型,从而使JVM知道这个类可以安全地串行化。
这种没有声明任何方法的接口,叫做标示接口(marker interface)。标示接口是一种设计模式,感兴趣的读者可以参见我的书《Java与模式》
阎宏博士,写于纽约
《Java与模式》作者
电子信箱:javapatterns@yahoo.com
个人网站http://www.WebEndsHere.com
或者http://218.6.168.109/jeffyan77/(中国临时使用))
或者http://webendshere.nstemp.com(美国临时使用)
个人作品集http://www.yesky.com/20011108/203866.shtml
买书请到:
http://www.china-pub.com/computers/common/info.asp?id=8182
http://www.huachu.com.cn/itbook/itbookinfo.asp?lbbh=BB07630282
http://www.cnforyou.com/query/bookdetail.asp?viBookCode=7638
|
网络传输数据,文件存盘读取时会用到的
|
对象序列化接口,远程传输对象,或以文件行式进行保存。
|
串行化后在网络传输,就像你读/写一个文件流一样。
|
序列化,,可以将一个对象以字节的形式存储在磁盘中或者在网络上传输,当从磁盘或网络中得到数据时可以恢复成原来的对象。
|
在分布式计算中的应用很大,尤其是RPC(在JAVA中多是RMI)
|
它只是一个标志!!
,表示实现其接口的类的实例可以序列化.
,表示实现其接口的类的实例可以序列化.
|
序列化 用在 对象编码成字节流及从字节流编码重构对象。
序列化 为远程通信提供了标准的wire-level协议。
要使类的实例实现序列化,只要在它的声明中加入implements
java.io.Serializable
但是却由一些隐患
1 实现了序列化后,一旦发布,讲削弱改变类实现的灵活性。
2 增加了bug和安全漏洞的的可能性
3 当你的新版本发布时增加了相关的测试上的问题。
类应尽可能少的实现Serializable,接口也应该少去扩展它。
序列化 为远程通信提供了标准的wire-level协议。
要使类的实例实现序列化,只要在它的声明中加入implements
java.io.Serializable
但是却由一些隐患
1 实现了序列化后,一旦发布,讲削弱改变类实现的灵活性。
2 增加了bug和安全漏洞的的可能性
3 当你的新版本发布时增加了相关的测试上的问题。
类应尽可能少的实现Serializable,接口也应该少去扩展它。
|
大家说的都很对,它(serializable)主要支持对象的回复,所以可以用来保存当前的程序系统状态,远程方法调用RMI(远程机器必须含有必要的.class文件,否则将掷出classNotFound Exception),但是因为它将对象数据自动全部保存,你根本无法插手,因此对于一些敏感字段(如:password)存在安全问题。但相应有很多解决的方法,例如可以在敏感字段的声明中使用transient关键字,或者去继承externalizable接口,自己来实现readExternal()和writerExternal()方法,再或者继承serializable接口,但提供private void writeObject(ObjectOutputStream s)等方法... ...但注意static 成员的保存仍需要你的介入。