- 浏览: 347219 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
孙大圣123:
大神,你分享的castor dtd文件中没有field-han ...
Castor (二) -- 自定义映射 -
ananeye:
建议举些通俗的例子,说明下。光这样讲,不好懂。
ORACLE 索引原理 -
度_java:
1.不在不同的机器上实现集群功能,除非他们的时钟同步精确到秒。 ...
Quartzs -- Quartz.properties 配置 -
2047699523:
可以参考最新的文档:如何在eclipse jee中检出项目并转 ...
MAVEN3--(三)创建MAVEN项目 -
qgm168:
写的不错,借用啦,哈哈,多谢!
自定义POI EXCEL模板
简介
由于反序列化时会重新生成一个新的对象实例,这与单例模式和枚举类实现唯一性原则相违背,为了使它们不矛盾,必须修改反 序列化的流程来实现唯一性
实现
在目标类中增加下列方法:
private Object readResolve();
1)单例模式
StudentSingleton.java
package com.siyuan.serializable; import java.io.Serializable; public class StudentSingleton implements Serializable{ private static final long serialVersionUID = -6060021285898900767L; private int id; private static final StudentSingleton instance = new StudentSingleton(1); private StudentSingleton(int id) { this.id = id; } public static StudentSingleton getInstance() { return instance; } private Object readResolve() { System.out.println("readResolve ... "); return instance; } }
StudentSingletonTest.java
package com.siyuan.serializable.test; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import com.siyuan.serializable.StudentSingleton; public class StudentSingletonTest { /** * @param args * @throws IOException * @throws ClassNotFoundException */ public static void main(String[] args) throws IOException, ClassNotFoundException { StudentSingleton stu = StudentSingleton.getInstance(); System.out.println(stu); System.out.println("Serialized begin..."); ByteArrayOutputStream output = new ByteArrayOutputStream(); ObjectOutputStream objOutput = new ObjectOutputStream(output); objOutput.writeObject(stu); System.out.println("Serialized end..."); System.out.println("Deserialized begin..."); ByteArrayInputStream input = new ByteArrayInputStream(output.toByteArray()); ObjectInputStream objInput = new ObjectInputStream(input); StudentSingleton stuDe = (StudentSingleton) objInput.readObject(); System.out.println("Deserialized end..."); System.out.println(stuDe); } }
运行结果
com.siyuan.serializable.StudentSingleton@757aef Serialized begin... Serialized end... Deserialized begin... readResolve ... Deserialized end... com.siyuan.serializable.StudentSingleton@757aef
2)枚举类实现
ColorEnum.java
package com.siyuan.serializable; import java.io.Serializable; public class ColorEnum implements Serializable{ private static final long serialVersionUID = 3995474245155583240L; public static final ColorEnum RED = new ColorEnum("red"); public static final ColorEnum GREEN = new ColorEnum("green"); public static final ColorEnum BLUE = new ColorEnum("blue"); private String color; private ColorEnum(String color) { this.color = color; } private Object readResolve() { System.out.println("readResolve ... "); if ("red".equals(this.color)) { return RED; } else if ("green".equals(this.color)) { return GREEN; } else if ("blue".equals(this.color)) { return BLUE; } else { throw new IllegalStateException(); } } }
ColorEnumTest.java
package com.siyuan.serializable.test; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import com.siyuan.serializable.ColorEnum; public class ColorEnumTest { /** * @param args * @throws IOException * @throws ClassNotFoundException */ public static void main(String[] args) throws IOException, ClassNotFoundException { ColorEnum red = ColorEnum.RED; System.out.println(red); System.out.println("Serialized begin..."); ByteArrayOutputStream output = new ByteArrayOutputStream(); ObjectOutputStream objOutput = new ObjectOutputStream(output); objOutput.writeObject(red); System.out.println("Serialized end..."); System.out.println("Deserialized begin..."); ByteArrayInputStream input = new ByteArrayInputStream(output.toByteArray()); ObjectInputStream objInput = new ObjectInputStream(input); ColorEnum redDe = (ColorEnum) objInput.readObject(); System.out.println("Deserialized end..."); System.out.println(redDe); } }
运行结果
com.siyuan.serializable.ColorEnum@757aef Serialized begin... Serialized end... Deserialized begin... readResolve ... Deserialized end... com.siyuan.serializable.ColorEnum@757aef
参考资料
http://www.javapractices.com/home/HomeAction.do
发表评论
-
ResourceBundle
2013-12-16 11:04 5541.简介 资源包包含特定于语言环境的对象。当程 ... -
JSR303(一) 简介
2013-09-18 17:18 15611.简介 数据校验是任何一个应用程序都会用到的功能,无论 ... -
JVM内存管理
2013-07-29 17:41 11241.Java中哪些组件需要用到内存 1)堆 用于存储J ... -
JVM体系结构
2013-07-26 15:43 34481.关于JVM 1)它是一个 ... -
关于ClassLoader
2013-07-26 10:24 11051.简介 ClassLoader,顾 ... -
ZIP压缩和解压
2013-05-29 17:32 9081.简介 JAVA通过ZipInputStream和Zip ... -
nio(三) FileChannel
2013-05-28 16:27 17391.简介 JDK1.4在IO的基础上引入NIO, ... -
nio(二)Buffer的子类
2013-05-24 17:34 13341.简介 Buffer针对除boolean之外的每个基本类 ... -
nio(一)Buffer
2013-05-23 11:23 13091.简介 Buffer是一种用 ... -
ProcessBuilder & Process
2013-05-21 16:40 10471.ProcessBuilder介绍 此类用于创建操作系统 ... -
String编码(五) 文件编码检测
2013-03-26 11:13 19071.简介 为了防止读取编码不确定的文本文件时出现乱码现象 ... -
String编码(四) 关于文件处理
2013-03-25 17:01 10601.简介 分析JAVA对文件 ... -
String编码(三) 关于编译
2013-03-19 15:42 9501.疑问 JDK编译JAVA文件生成的字节码.class ... -
String编码(二) 证明JAVA的char编码为UTF-16
2013-03-19 09:06 56071.简介 通过程序证明JAVA的char内部编码为UTF- ... -
String编码(一) 关于String.getBytes()
2013-03-18 17:46 13711.简介 本次学习的目的是为了弄清JAVA在不同情况下对 ... -
JSP自定义标签
2012-10-16 23:30 27431.简介 标签是一种XML元素,通过标签可以使JSP网 ... -
HttpServletResponse.getWriter()用完之后需不需要调用close()
2012-05-24 22:24 11793HttpServletResponse.getWriter() ... -
JAVA序列化(二) 自定义序列化
2012-05-14 00:08 1390简介: 在某些情况下,可能需要改变Serializable类 ... -
JAVA序列化(一) Serializable
2012-05-13 23:49 1061简介: 本文主要介绍的是JAVA序列化的最佳实践,所以直接跳 ... -
JAVA中的REGEXP非捕获组
2011-11-02 23:30 23261.简介 JAVA中REGEXP的非 ...
相关推荐
本专栏主要为Java程序设计(基础)实验报告和Java程序设计(进阶)...进阶篇有反射、泛型、注解、网络编程、多线程、序列化、数据库、Servlet、JSP、XML解析、单例模式与枚举。本专栏主要为Java入门者提供实验参考。
本源码由 springboot 开发,只有2个简单的文件(1是 枚举类单例,2是 controller请求测试类)。 主要测试了枚举类的饿汉式加载机制 / 单例机制。 代码中包含枚举类的基本使用,和完整的请求示例。 主要实现了枚举类...
本专栏主要为Java程序设计(基础)实验报告和Java程序设计(进阶)...进阶篇有反射、泛型、注解、网络编程、多线程、序列化、数据库、Servlet、JSP、XML解析、单例模式与枚举。本专栏主要为Java入门者提供实验参考。
本专栏主要为Java程序设计(基础)实验报告和Java程序设计(进阶)...进阶篇有反射、泛型、注解、网络编程、多线程、序列化、数据库、Servlet、JSP、XML解析、单例模式与枚举。本专栏主要为Java入门者提供实验参考。
本专栏主要为Java程序设计(基础)实验报告和Java程序设计(进阶)...进阶篇有反射、泛型、注解、网络编程、多线程、序列化、数据库、Servlet、JSP、XML解析、单例模式与枚举。本专栏主要为Java入门者提供实验参考。
本专栏主要为Java程序设计(基础)实验报告和Java程序设计(进阶)...进阶篇有反射、泛型、注解、网络编程、多线程、序列化、数据库、Servlet、JSP、XML解析、单例模式与枚举。本专栏主要为Java入门者提供实验参考。
本专栏主要为Java程序设计(基础)实验报告和Java程序设计(进阶)...进阶篇有反射、泛型、注解、网络编程、多线程、序列化、数据库、Servlet、JSP、XML解析、单例模式与枚举。本专栏主要为Java入门者提供实验参考。
目录单例模式懒汉式单例模式未初始化问题解决Double Check 双重检查方案一:不让第二步和第三步重排序-DoubleCheck方案二:基于类初始化-静态内部类饿汉式饿汉式与懒汉式最大区别序列化破坏单例模式原理枚举单例基于...
本专栏主要为Java程序设计(基础)实验报告和Java程序设计(进阶)...进阶篇有反射、泛型、注解、网络编程、多线程、序列化、数据库、Servlet、JSP、XML解析、单例模式与枚举。本专栏主要为Java入门者提供实验参考。
本专栏主要为Java程序设计(基础)实验报告和Java程序设计(进阶)...进阶篇有反射、泛型、注解、网络编程、多线程、序列化、数据库、Servlet、JSP、XML解析、单例模式与枚举。本专栏主要为Java入门者提供实验参考。
本专栏主要为Java程序设计(基础)实验报告和Java程序设计(进阶)...进阶篇有反射、泛型、注解、网络编程、多线程、序列化、数据库、Servlet、JSP、XML解析、单例模式与枚举。本专栏主要为Java入门者提供实验参考。
本专栏主要为Java程序设计(基础)实验报告和Java程序设计(进阶)...进阶篇有反射、泛型、注解、网络编程、多线程、序列化、数据库、Servlet、JSP、XML解析、单例模式与枚举。本专栏主要为Java入门者提供实验参考。
本专栏主要为Java程序设计(基础)实验报告和Java程序设计(进阶)...进阶篇有反射、泛型、注解、网络编程、多线程、序列化、数据库、Servlet、JSP、XML解析、单例模式与枚举。本专栏主要为Java入门者提供实验参考。
本专栏主要为Java程序设计(基础)实验报告和Java程序设计(进阶)...进阶篇有反射、泛型、注解、网络编程、多线程、序列化、数据库、Servlet、JSP、XML解析、单例模式与枚举。本专栏主要为Java入门者提供实验参考。
本专栏主要为Java程序设计(基础)实验报告和Java程序设计(进阶)...进阶篇有反射、泛型、注解、网络编程、多线程、序列化、数据库、Servlet、JSP、XML解析、单例模式与枚举。本专栏主要为Java入门者提供实验参考。
本专栏主要为Java程序设计(基础)实验报告和Java程序设计(进阶)...进阶篇有反射、泛型、注解、网络编程、多线程、序列化、数据库、Servlet、JSP、XML解析、单例模式与枚举。本专栏主要为Java入门者提供实验参考。
本专栏主要为Java程序设计(基础)实验报告和Java程序设计(进阶)...进阶篇有反射、泛型、注解、网络编程、多线程、序列化、数据库、Servlet、JSP、XML解析、单例模式与枚举。本专栏主要为Java入门者提供实验参考。
本专栏主要为Java程序设计(基础)实验报告和Java程序设计(进阶)...进阶篇有反射、泛型、注解、网络编程、多线程、序列化、数据库、Servlet、JSP、XML解析、单例模式与枚举。本专栏主要为Java入门者提供实验参考。
本专栏主要为Java程序设计(基础)实验报告和Java程序设计(进阶)...进阶篇有反射、泛型、注解、网络编程、多线程、序列化、数据库、Servlet、JSP、XML解析、单例模式与枚举。本专栏主要为Java入门者提供实验参考。
本专栏主要为Java程序设计(基础)实验报告和Java程序设计(进阶)...进阶篇有反射、泛型、注解、网络编程、多线程、序列化、数据库、Servlet、JSP、XML解析、单例模式与枚举。本专栏主要为Java入门者提供实验参考。