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

Java序列化机制对单例模式的影响及解决方法

阅读更多
  序列化对单例模式和枚举类型安全的影响:
A.在枚举类型加入Java之前,往往采用以下的代码:
   public class Orientation{
      private static final Orientation HORIZONTAL=new Orientation(1);
      private static final Orientation VERTICAL=new Orientation(2);
      private Orientation(int v){ value=v; }//*注意单例模式中构造器为私有
       private int value;
   }
   单例模式的私有构造器决定,除了Orientation.HORIZONTAL或Orientation.VERTICAL,不能创建对象.可以用==测试两个对象:
    if(orientation==Orientation.HORIZONTAL) ...
    但这种情况在实现序列化接口时会发生错误,当你序列化Orientation.HORIZONTAL或Orientation.VERTICAL,再反序列化出来时,会在内存中产生一个新的对象,导致以下比较错误:
    if(saved==Orientation.HORIZONTAL) ...
    即使是私有构造器,序列化机制依然能创建一个新的对象.
    解决方案:增加readReslove方法,该方法会在反序列化时调用,且返回一个对象,这个对象就是readObject返回的对象:
    public Object readObejct() throws ObjectStreamException{
      if(value==1) return Orientation.HORIZONTAL;
      if(value==2) return Orientation.VERTICAL;
      return null;//这通常不发生
    }
0
10
分享到:
评论

相关推荐

    【大厂面试题总结】JavaSE面试题总结详细教程

    【大厂面试题总结】JavaSE面试题总结详细教程: 目录: 递归算法之输出某个目录下所有文件和子目录列表 泛型中extends和super的区别 ...java序列化方式 java中实现多态的机制 string常量池和intern韩雅茹

    【大厂面试题总结】JavaSE面试题合集及其答案,基本包括javaSE所有知识点和详细解释

    【大厂面试题总结】JavaSE面试题合集及其答案,基本包括javaSE所有知识点和详细解释 。 JavaSE面试题总结详细教程: 目录: 递归算法之输出某个目录下所有...java序列化方式 java中实现多态的机制 string常量池和intern

    2023Java高频面试题

    IO流:Java中常用的文件读写、序列化和反序列化等操作。 多线程编程:线程的基本概念、线程同步、线程安全、死锁等问题。 JDBC:Java与数据库的交互,连接池的使用等。 Spring框架:Spring框架的基础概念、IOC容器、...

    【白雪红叶】JAVA学习技术栈梳理思维导图.xmind

    序列化 nIo 匿名类 包装类 优先级 引用 语言工具类库 容器类 集合 链表 map 工具类 系统类 日期类 数字类 字符串+正则 流 字符流 字节流 语言特性 继承 封装 多态 JVM 多线程与并发 GC...

    北京百度java面试题大全

    IO操作:包括文件读写、字符流和字节流、序列化与反序列化等IO操作的相关知识。 JDBC和数据库:涉及JDBC的使用、连接数据库、执行SQL语句、事务管理等数据库相关的知识。 Java虚拟机(JVM):包括垃圾回收机制、...

    史上最详细的【一线大厂面试题】详解及其答案

    目录: 1、前端 2、JavaSE 3、mysql数据库 4、springboot 5、缓存 更详细目录(子目录): 1、前端目录 ①如何避免CDN为PC端缓存移动端页面 ...15、java序列化方式 16、java中实现多态的机制 17、string常量池和intern

    Java基础语法面试题.docx

    Java基础语法面试题资源通常是指帮助准备...设计模式:介绍常见的设计模式,如单例模式、工厂模式、观察者模式等。 常见算法和数据结构:可能包含一些常见的算法问题,如查找、排序、递归等,以及与之相关的数据结构。

    java 面试题 总结

    Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。 10、&和&&的区别。 &是位运算符,表示按位与运算,&&是逻辑运算符,表示逻辑与(and)。 11、HashMap...

    java内部学习笔记.docx

    4.22单例模式和模版方法模式 48 Java SE核心II 49 5.1 Java异常处理机制 49 5.2 File文件类 51 5.3 RandomAccessFile类 53 5.4基本流:FIS和FOS 55 5.5缓冲字节高级流:BIS和BOS 56 5.6基本数据类型高级流:DIS和DOS...

    java面试题

    65. 什么是java序列化,如何实现java序列化? 48 65.1. java序列化、反序列化 48 65.2. 对象的序列化主要有两种用途: 48 65.3. 对象序列化包括如下步骤: 49 65.4. 对象反序列化的步骤如下: 49 66. 反射机制 49 ...

    Java核心技术II(第8版)

    1.5.2 修改缺省的序列化机制 1.5.3 序列化单例和类型安全的枚举 1.5.4 版本管理 1.5.5 为克隆使用序列化 1.6 文件管理 1.7 新I/O 1.7.1 内存映射文件 1.7.2 缓冲区数据结构 1.7.3 文件加锁机制 1.8 正则表达式 第十...

    超级有影响力霸气的Java面试题大全文档

    超级有影响力的Java面试题大全文档 1.抽象: 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。...

    java面试题,180多页,绝对良心制作,欢迎点评,涵盖各种知识点,排版优美,阅读舒心

    【基础】Java序列化与反序列化 27 为什么需要序列化与反序列化 28 如何实现Java序列化与反序列化 28 【基础】String s = new String("xyz");创建了几个字符串对象 30 【基础】接口是否可继承(extends)接口?抽象类...

    JAVA 范例大全 光盘 资源

    实例88 序列化和反序列化 226 实例89 Zip格式压缩、解压缩文件 228 实例90 从Jar中读取文本 232 实例91 流标记分割和统计字符串 234 实例92 Java操作Excel文件 237 第11章 Java高级特性 245 实例93 自动装箱与...

    java范例开发大全源代码

     实例130 对象的序列化与反序列化 185  实例131 同时显示多个文件 187  实例132 生成zip压缩文件 189  实例133 解压缩zip文件 192  实例134 生成Excel文件 194  实例135 读取Excel文件中的内容 198 ...

    java范例开发大全

    实例130 对象的序列化与反序列化 185 实例131 同时显示多个文件 187 实例132 生成zip压缩文件 189 实例133 解压缩zip文件 192 实例134 生成Excel文件 194 实例135 读取Excel文件中的内容 198 实例136 生成PDF文件 ...

    Java范例开发大全 (源程序)

     实例130 对象的序列化与反序列化 185  实例131 同时显示多个文件 187  实例132 生成zip压缩文件 189  实例133 解压缩zip文件 192  实例134 生成Excel文件 194  实例135 读取Excel文件中的内容 198  ...

    Java高并发高性能分布式框架从无到有微服务架构设计(1).doc

    还有就是从最基础的地方优化我们写代码减少不必要的资源浪费:不要频繁的new对 象,对于在整个应用中只需要存在一个实例的类使用单例模式.对于String的连接操作,使 用StringBuffer或者StringBuilder.对于utility类型...

    Java范例开发大全(全书源程序)

    实例130 对象的序列化与反序列化 185 实例131 同时显示多个文件 187 实例132 生成zip压缩文件 189 实例133 解压缩zip文件 192 实例134 生成Excel文件 194 实例135 读取Excel文件中的内容 198 实例136 生成PDF...

Global site tag (gtag.js) - Google Analytics