在分布式计算中的应用很大,尤其是RPC(在JAVA中多是RMI)

解决方案 »

  1.   

    序列化 用在 对象编码成字节流及从字节流编码重构对象。
    序列化 为远程通信提供了标准的wire-level协议。
    要使类的实例实现序列化,只要在它的声明中加入implements java.io.Serializable
    但是却由一些隐患
    1 实现了序列化后,一旦发布,讲削弱改变类实现的灵活性。
    2 增加了bug和安全漏洞的的可能性
    3 当你的新版本发布时增加了相关的测试上的问题。类应尽可能少的实现Serializable,接口也应该少去扩展它。
      

  2.   

    如果您问的是这个接口java.io.Serializable的用处,而不是串行化本身的用处的话,请继续读:java.io.Serializable是一个空接口,也就是说这个接口没有声明任何的方法,所以实现这个接口的类也就不需要实现任何的方法。那么这个接口还有什么用处呢?这个接口使得所有的实现它的类具有一个特殊的(mixin)类型,从而使JVM知道这个类可以安全地串行化。这种没有声明任何方法的接口,叫做标示接口(er interface)。标示接口是一种设计模式,感兴趣的读者可以参见我的书《Java与模式》阎宏博士,写于纽约
    《Java与模式》作者
    电子信箱:[email protected]
    个人网站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
      

  3.   

    大家说的都很对,它(serializable)主要支持对象的回复,所以可以用来保存当前的程序系统状态,远程方法调用RMI(远程机器必须含有必要的.class文件,否则将掷出classNotFound Exception),但是因为它将对象数据自动全部保存,你根本无法插手,因此对于一些敏感字段(如:password)存在安全问题。但相应有很多解决的方法,例如可以在敏感字段的声明中使用transient关键字,或者去继承externalizable接口,自己来实现readExternal()和writerExternal()方法,再或者继承serializable接口,但提供private void writeObject(ObjectOutputStream s)等方法... ...但注意static 成员的保存仍需要你的介入。