java对象序列化的思考,没头绪,不知我想法哪里有错
善桀 2010-01-08 05:41:23 如果想让java对象在网络间传输,那么就必须对该类实现序列化接口(implements Serializable)。
比如我写一个类,我认为它会在网络上传输,所以我为该类实现了序列化“implements Serializable”,
并且在该类中我调用了许多其他类(如调用很多java类库的类或其他包里的很多类)并创建了许多其他类
的对象,那么只有当前类实现了序列化接口够吗?因为我在传输一个对象时要把它内部所有的信息传输过去
才行,可它内部用到的其它类并没有实现序列化,这种情况能传输吗?我感觉是既然其他类并没有实现
序列化,他们的对象当然无法传输,这怎么办?
打个比方,在hibernate中我定义一个Student类,给它和数据库建立关系映射(O/R),现在我不把Student类
中的id作为主键,我想把Student类中的id和name属性都删掉,然后再专门建立一个StudentPK类,里面有id和name
属性,之后把StudentPK放入Student类中作为主键,就是hibernate中常用到的复合主键。hibernate要求必须为
StudentPK这个类实现序列化,也就是为了防止Student类在网络中传输,所以要Student的属性StudentPK必须实现
序列化implements Serializable。这里我有一个问题,既然要求属性StudentPK序列化,那是不是我们自己也应该
检查下Student内部中的其他属性是否实现了序列化,假如它有很多其他类型的属性,如Person,String等,难道
我们必须检查Student内部所有的类是否实现了序列化?检查完是不是还要检查这些类里面的属性是否也实现了序列化,例如是不是应该看下Person这个类内部的类也同样实现了序列化,如此一来就要把整个树状结构涉及到的所有类都检查一遍
并为他们实现序列化,这太不可思议了吧
所以我认为java所有的类都应该实现序列化接口,因为都有可能在网络上传输,大家怎么认为?
提前谢过各位!!!