`
mozhenghua
  • 浏览: 324540 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

分布式应用中java对象序列化问题

 
阅读更多

 

 在分布式应用中,通常会以RMI协议作为分布式服务的对象传输协议,在不同服务器之间传输对象之前需要先将对象序列化,java底层sdk中已经将对象的序列化机制实现了。几乎可以兼容所有java类型的序列化(Serialize)

 

在实际应用中需要注意以下几点:

 

 

  ◢1 需要序列化的对象需要实现java.io.Serializable 接口,如果在传输对象的对象的类型没有实现这个接口的话,运行时通常会抛出异常。

 

  通常为了避免这个问题的发生的办法是,在写代码的时候在参数申明上就申明为java.io.Serializable的对象类型。这样类似的错误在代码编译期就能发现。

 

  ◢2 在写EJB的实现类的的过程中,函数返回值如果是一个list的话,那在返回结果的时候不能是

ArrayList result = new ArrayList();
//.......

return result.subList(0,5);

  这样返回给容器,容器在处理返回结果的序列化的时候会抛出异常,原因很简单,subList 返回的结果是 SubList类型的而sublist没有实现 Serializable接口

 

  ◢3 如果函数返回对象是list,而这个list会随之序列化,那list中的对象的属性如果存在相互引用的话,则list在序列化的时候会出问题,出现死循环。

                        

类似返回的list中存放着上图的User对象,而每个User对象中都有一个Friend属性,如果在列表中前一的两个User对象他们互为朋友的话,那这整个对象将无法序列化。

解决办法是确定User对象中的Friend属性是否真的需要序列化,如果没有必要序列化的话,就在定义Friend属性的地方加上transient 这个关键字,告诉java虚拟机在序列化操作的时候不对该属性进行序列化操作。

 

 

  • 大小: 4.1 KB
分享到:
评论
2 楼 bushyou 2011-09-19  
第三点领教了!
1 楼 jstudio 2011-09-16  
瓜哥分析得很好,学习了~

相关推荐

    Java对象序列化的秘密

    Java对象序列化是Java平台提供的一种机制,允许将对象的状态转换为字节流,以便存储在磁盘上、通过网络传输或在不同时间点恢复。这个过程涉及到将一个复杂的Java对象模型转换为简单的二进制表示,使得数据可以在不同...

    java对象序列化 传输 保存

    Java对象序列化是一种将Java对象转换为...总之,Java对象序列化是一个强大且实用的功能,它在数据持久化、网络通信等多个场景下都有广泛的应用。理解并掌握序列化机制,对于开发Java应用程序尤其是分布式系统至关重要。

    C#和Java的序列化反序列化

    在分布式系统中,序列化和反序列化是实现对象在不同进程或机器间传递的关键步骤。 安全性方面,序列化和反序列化也可能带来潜在的安全风险。攻击者可能构造恶意的序列化数据来触发代码执行。因此,开发者应谨慎处理...

    Java对象序列化详细解析.doc

    总结来说,Java对象序列化是Java平台提供的一种强大的机制,用于保存和恢复对象的状态,广泛应用于持久化存储、网络传输和分布式计算等场景。理解和熟练使用序列化是每个Java开发者必备的技能之一。

    JAVA对象的序列化与反序列化详细PPT课件.pptx

    前者代表对象输出流,具备`writeObject(Object obj)`方法,可以将对象序列化并写入到目标输出流;后者代表对象输入流,其`readObject()`方法能从输入流中读取字节流并反序列化为对象。 为了使一个Java对象能够被...

    Java对象序列化

    Java对象序列化是Java平台提供的一种将对象的状态转化为字节流,以便存储或者在网络中传输的技术。这个过程称为序列化,而将字节流恢复为原来的对象状态则称为反序列化。序列化对于数据持久化、网络通信以及跨进程...

    java自动序列化

    通过实现`Serializable`接口,一个Java对象就可以被序列化。这个接口是一个标记接口,没有定义任何方法,仅表示对象支持序列化。 二、为什么需要Java序列化 1. 持久化:序列化可以将对象状态持久化到磁盘,以便下次...

    Java序列化

    Java序列化是Java平台中的一种标准机制,允许将对象的状态转换为字节流,以便存储在磁盘上、通过网络进行传输或者在某些时候恢复原来的对象状态。这一过程包括两个主要步骤:对象的序列化(将对象转换为字节流)和反...

    Java对象序列化.pdf

    总的来说,Java对象序列化是一个强大的工具,但也需要根据具体的应用场景进行适当的优化。开发者需要平衡性能需求、代码的可读性和维护性,以实现最佳的序列化策略。在考虑优化时,应始终注意性能测试,确保所做的...

    通过socket传递java对象(对象序列化)

    在给出的博客链接中,作者可能详细阐述了如何编写服务器端和客户端的代码,包括创建Socket连接、实现对象序列化和反序列化的方法,以及如何处理可能遇到的问题。通过阅读源码,我们可以更深入地理解这一过程。 5. ...

    Java对象的序列化与反序列化Java开发Java经验技巧

    Java对象的序列化与反序列化是Java编程中一项重要的技术,它允许我们将Java对象转换为字节流,便于存储、传输或者在网络间传递。这一过程对于数据持久化、跨进程通信(如RMI,Remote Method Invocation)以及分布式...

    Java对象序列化详细解析[参考].pdf

    Java对象序列化是一种将Java对象转换为字节流的过程,以便可以存储或在网络上传输。这一过程至关重要,因为它允许我们持久化对象的状态,以便在稍后的时间点恢复这些对象。在Java中,对象序列化主要涉及到`...

    Java中对象序列化与反序列化详解

    总之,Java对象序列化是Java开发中的一项关键技术,它允许对象的状态在不同环境间传输和恢复。理解并掌握序列化和反序列化的基本原理、方法以及注意事项,对于开发高质量的Java应用程序至关重要。

    Java反序列化安全漏洞防控

    反序列化则是将字节流恢复为Java对象的过程。 在Java反序列化安全漏洞中,攻击者可以构造特殊的序列化数据,当目标应用程序反序列化这些数据时,会执行攻击者提供的恶意代码。由于Java在反序列化对象时并没有对对象...

    Java实现序列化例子

    1. **对象序列化**: - 创建可序列化的类:首先,你需要定义一个类,并且在类声明中加入`implements Serializable`,例如: ```java public class MySerializableClass implements Serializable { // 类的属性 ...

    java中的序列化与反序列化

    总的来说,Java的序列化和反序列化是Java开发中的重要概念,它们使得对象能够在不同环境之间进行传输和持久化,但也需要开发者关注其中的安全问题。理解和熟练掌握序列化机制,对于编写高效、安全的Java应用程序至关...

    翻译_Java对象的序列化

    Java对象的序列化是Java平台提供的一种将对象转化为字节序列的能力,以便于存储或在网络中传输。这个特性使得任何实现了Serializable接口的...在实际开发中,熟练掌握对象序列化对于构建分布式系统和复杂应用至关重要。

    java序列化和反序列化

    序列化机制使得Java对象能够在不同的平台之间进行传输,并且能够保持其原始状态。 **特点:** - **跨平台兼容性:** 序列化后的对象可以在不同的操作系统之间传输,无需担心数据格式或内存布局的不同。 - **对象...

    java序列化(Serializable)的作用和反序列化

    序列化和反序列化是Java中非常重要的概念,它们提供了强大的工具来处理对象的状态保存和恢复问题。通过上述介绍和示例代码,我们可以看到序列化的基本过程及其应用场景。掌握这些知识对于开发高效可靠的Java应用程序...

Global site tag (gtag.js) - Google Analytics