序列化

Java 序列化的问题之二——单例

第二个问题是如何读取应该是单例(Singleton)的序列化数据?当然要保证一是单例,二是数据正确性。Google 出来的所有文章都是一个调:private Object readResolve() { return getInstance(); }。方法没错,肯定要使用 readResolve() 返回一个唯一的实例。但真的可行吗?看下面的程序:

  1. WrongSingletonObject.java
  2.  
  3. public class WrongSingletonObject implements Serializable {
  4.     private static WrongSingletonObject instance;
  5.  
  6.     private String value = "value1";
  7.  
  8.     private WrongSingletonObject() {
  9.     }
  10.  
  11.     public static synchronized WrongSingletonObject getInstance() {
  12.         if (instance == null) {

Java 序列化的问题之一——自定义的类加载器

项目中间用到了 Java 序列化,但碰到了几个问题,可以说道说道。

由于涉及到问题以及解决方法有些繁杂,所以用一套例子来演示各种情况,项目以 [Ant] 编译运行。目录文件如下:

  1. CustomObject.java // 就是我们的主角了,它本身是在缺省的类路径,但其子类都是单独的 jar
  2. |-- SubCustomObject.java // 第一个子类
  3.     |-- plugin1.properties // 第一个子类所对应的信息,让加载器读取
  4. |-- AnotherSubCustomObject.java // 第二个子类
  5.     |-- plugin2.properties // 同上
  6.  
  7. // 主程序
  8. SerializationTest.java
  9.  
  10. // 单例类
  11. CustomObjectUtils.java
  12. // 自定义的类加载器
  13. CustomClassLoader.java
  14.  
  15. // 最简单的对象容器
  16. SimpleCustomObjectHolder.java
  17. // 将包含的对象在序列化时转换成 String,并在逆序列化时再转换回来。
  18. CustomObjectHolder.java
  19. // 列表容器,演示 Collection
Syndicate content