无法序列化我的对象

时间:2014-04-19 20:05:58

标签: java serialization

我正在尝试序列化这个Configuration对象,但对于我的生活,我无法得到它。我已经检查过包括StackOverflow在内的所有地方。任何帮助将不胜感激。

序列化代码:

public void serialize(String outFile)
        throws IOException {
    Configuration config = new Configuration().getConfiguration();
    System.out.println(config.email);
      try
      {
         FileOutputStream outputFile =
         new FileOutputStream("/home/jason/Desktop/config.ser");
         ObjectOutputStream objectOutput = new ObjectOutputStream(outputFile);
         objectOutput.writeObject(config);
         objectOutput.close();
         outputFile.close();
      }catch(IOException i)
      {
          i.printStackTrace();
      }
      System.out.println(config);
}

public void deSerialize()
        throws FileNotFoundException, IOException, ClassNotFoundException {

    Configuration config = new Configuration().getConfiguration();
      try
      {
         FileInputStream inputFile = new FileInputStream("/home/jason/Desktop/config.ser");
         ObjectInputStream objectInput = new ObjectInputStream(inputFile);
         config = (Configuration) objectInput.readObject();
         config.setConfiguration(config);
         objectInput.close();
         inputFile.close();
      }catch(Exception e)
      {
          e.printStackTrace();
      }

      System.out.println(config);

}

然后我用以下代码调用它:

DataStore data = new DataStore().getInstance();
        try {
            data.deSerialize();
        } catch (ClassNotFoundException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }

DataStore是一个简单的单例,不带任何输入参数。它没有任何实际变量,只是使用序列化函数。

最后,这是我的配置代码:

public class Configuration implements Serializable{
private static final long serialVersionUID = 1388190376766023647L;
public static String email = "";
private static String ip = "";
private static String password = "";
private static String importNumber;
private static Configuration configuration;
private static int singleton = 0;
public String value_of_da_message;

public Configuration()
{}

public Configuration getConfiguration()
{
    if(singleton == 0){
        configuration = new Configuration();
        singleton++;
        return configuration;
    }

    else
        return configuration;
}

public void setConfiguration(Configuration config)
{
    configuration = config;
}

关于我哪里出错的任何线索?谢谢你的帮助。

1 个答案:

答案 0 :(得分:2)

看看这里:Java static serialization rules?

将您的字段更改为实例字段,这样无论如何都更适合单例方法。

字段可能是序列化的,但反序列化通常会忽略静态字段。

此外,您似乎正在阅读临时对象:

config.setConfiguration(config);

这使用了两次读取对象并且没有设置单例的数据,除非你保持静态字段(即configuration类中的Configuration是对单例的引用并且需要是静态的)

<强>更新

另一个提示:静态变量singleton可能会导致问题而且无论如何都是不需要的。只需检查configuration == null而不是singleton == 0

<强>提示

我尝试一般性地帮助您进行序列化,但在您的特殊情况下,您可能希望使用Properties而不是具有内置序列化功能(支持.properties-和xml文件),这意味着用于配置。