`
lvhuiqing
  • 浏览: 249724 次
  • 性别: Icon_minigender_1
  • 来自: 沈阳
社区版块
存档分类
最新评论

Java序列化之四: 进一步思考

 
阅读更多
1,当需要被序列化的类对象中的一部分成员变量是不可被序列化的,会发生什么情况呢?

   例如下面的的代码

public class Person implements Serializable {

 private static final long serialVersionUID = 2356129180978015792L;
 private String name;
 private int age;
 private Resume resume;

 public Resume getResume() {
  return resume;
 }

 public void setResume(Resume resume) {
  this.resume = resume;
 }

 public Person() {

 }

 public Person(String str, int n) {
  System.out.println("Inside Person's Constructor");
  name = str;
  age = n;
 }

 String getName() {
  return name;
 }

 int getAge() {
  return age;
 }
}


public class Resume {
 private String work;

 public String getWork() {
  return work;
 }

 public void setWork(String work) {
  this.work = work;
 }

 public String getCollege() {
  return college;
 }

 public void setCollege(String college) {
  this.college = college;
 }

 private String college;
}


 public Person(String str, int n) {
  System.out.println("Inside Person's Constructor");
  name = str;
  age = n;
 }

 String getName() {
  return name;
 }

 int getAge() {
  return age;
 }
}


   执行以上的代码可以发现,当Person对象的resume被赋值之后,序列化时
  
   会发生NotSerializableException。单就这一个问题,就带来了很大的复杂性。因为当一个
  
   系统中的类定义很多的时候,很难判断某一个类成员是否是Serilizable的。


2,当JDK版本切换之后,序列化过程会不会出错。

   答案:应该不会出错(未验证)

   参见以下网址
   http://docs.oracle.com/javase/6/docs/platform/serialization/spec/version.html
   http://stackoverflow.com/questions/152757/is-java-object-serialization-   compatible-between-1-5-and-1-6


3,transient关键字

   被transient修饰的成员变量不会被序列化。当实例1中的resume被transient修饰的时候,就不会抛出NotSerializableException。
分享到:
评论

相关推荐

    序列化与反序列化经典例子

    5. **序列化框架**:除了标准的Java序列化机制,还有许多高级的序列化库,如Jackson、Gson、protobuf等,它们提供了更灵活的配置和更好的性能。 在实际项目中,理解并熟练掌握序列化和反序列化对于开发高效、安全的...

    JAVA课程总复习

    6. **IO流**:讲解输入/输出流的基本概念,包括字节流和字符流,以及缓冲区、对象序列化等相关知识。 7. **多线程**:介绍线程的概念,创建线程的方式(继承Thread类和实现Runnable接口),线程同步和通信机制(如...

    Java实验项目A、Java结构化基础和数组编程

    Java实验项目A主要关注的是Java语言的基础学习,涵盖了Eclipse开发环境的使用、控制台输入输出、基本...完成这个实验将使学生具备基本的Java程序设计能力,为进一步学习面向对象编程、类库使用和复杂算法打下坚实基础。

    采用的编码格式为utf8,java实现的五子棋,运用java的Swing,实

    Java提供了一系列类如`ObjectOutputStream`和`ObjectInputStream`来进行对象的序列化和反序列化。 5. **切换背景**:为了增加游戏趣味性,玩家可能可以更换游戏背景。这可能涉及到图像处理和资源管理,Java的`javax...

    UML For Java Programmers

    ### UML对于Java程序员的重要性及应用 #### 一、引言 随着软件工程领域的不断发展,UML(统一建模语言)作为一种重要的可视化工具,在软件设计过程中...总之,这是一本值得每位Java程序员仔细研读并实践的经典之作。

    java编的五子棋

    7. **文件存储**:如果游戏支持保存和读取进度,那么还需要用到文件I/O功能,如序列化技术将棋盘状态写入文件。 8. **设计模式**:为了提高代码的可读性和可维护性,开发者可能应用了各种设计模式,如单例模式...

    Java写的西洋跳棋人机对战

    8. **持久化**:如果游戏支持保存和加载进度,那么还需要实现数据的序列化和反序列化,以便将棋局状态保存到文件并读取回来。 9. **多线程**:为了在计算复杂走法时不影响用户界面的响应性,可以使用Java的多线程...

    java习题代码集

    这在处理插件系统、序列化、动态代理等方面非常有用。在代码集中,你可能会遇到使用反射进行类操作的实例。 8. **Java API的使用** Java提供了一套庞大的标准库,如Collections框架、日期时间API、IO流、网络编程...

    Thinking in Java 4th

    5. **输入/输出**:讲解了I/O流的概念,包括字节流、字符流、缓冲流、对象序列化以及文件操作。 6. **网络编程**:介绍了套接字编程,包括客户端/服务器模型,以及如何使用Socket和ServerSocket进行网络通信。 7. ...

    Java进阶课堂同步代码.zip

    在“java-advanced-master”中,可能会有关于如何使用Class类、Constructor类、Method类以及Field类来实现动态代理、自定义序列化和反序列化、动态加载类等实例。 4. **设计模式**:设计模式是软件开发中的最佳实践...

    采用的编码格式为utf8,java实现的五子棋,

    综上所述,这个五子棋项目展示了Java编程语言在桌面应用开发中的能力,包括图形用户界面设计、文件操作、数据序列化以及游戏逻辑的实现。通过学习和理解这些知识点,开发者可以进一步提升自己的Java编程技能,尤其是...

    JAVA EE架构师 需要具备的知识.doc

    - **深入Java**:从“Think in Java”入手,逐步掌握Java的核心知识,包括集合、序列化、网络编程、多线程等。 - **工具运用**:熟练使用开发工具如Eclipse或IntelliJ IDEA,并了解JDK文档的使用方法。 - **设计模式...

    Java2课程学习ppt及课后练习源程序

    5. **输入/输出流**:讲解I/O流的概念,包括字节流、字符流、对象序列化,以及File类的使用。 6. **多线程**:Java2提供了对多线程的支持,包括Thread类和Runnable接口,以及同步机制(如synchronized关键字和wait/...

    java的一道考试题

    5. **IO流**:输入输出流的理解和使用,包括文件读写、缓冲流、对象序列化等,可能会出现在题目中。 6. **多线程**:Thread类和Runnable接口的使用,同步机制如synchronized关键字、wait/notify方法等,都是多线程...

    JAVA五子棋手机网络对战游戏的设计与实现(源代码+论文).rar

    这涉及到TCP/IP协议,数据的序列化和反序列化等。 4. **游戏逻辑**:五子棋的胜负判断和棋盘状态更新需要严谨的算法。例如,棋盘状态的表示(可能使用二维数组),以及判断是否有五子连珠的算法。 5. **错误处理**...

    大数据基础及进阶+面试指南

    4. **Apache Avro和Protocol Buffers**:这些是数据序列化工具,常用于Hadoop和Spark项目,以提高数据交换效率。 5. **大数据项目实战**:实际操作中,需要考虑数据源接入、数据处理流程设计、性能优化、错误处理和...

    thinkinjava源码-TIJ4Example:Java4示例源代码中的思考

    源码中会有对文件读写、字符流、字节流、缓冲流、对象序列化等方面的示例。 8. **网络编程**:Java提供了丰富的Socket类用于网络通信,源码可能会包含客户端-服务器模型的简单实现,演示TCP和UDP的使用。 9. **...

    java小实验

    ### Java小实验知识点详解 #### 实验1:熟悉上机环境与基础编程 ...通过这一系列的Java小实验,初学者不仅能够巩固Java基础语法,还能逐步建立起面向对象的编程思维,为进一步学习高级Java技术打下坚实的基础。

    安全客第一期.pdf

    这部分内容深入剖析了Java序列化的工作原理及其安全风险,并提供了一些最佳实践来避免这些问题的发生。 以上内容展示了《安全客第一期.pdf》中所涵盖的一些核心安全议题。从实际案例分析到理论探讨,这些内容不仅为...

Global site tag (gtag.js) - Google Analytics