Java 如何序列化单例对象?

Java 如何序列化单例对象?,java,serialization,Java,Serialization,我正在实现某种类型的通讯录,并希望将所有联系人保存在某种由我自己实现的数据库中,作为singletonHashMap contactsDB。可以序列化这样的对象吗?查看java API。如果您的自定义类实现了“serializable”,我认为您很好不要序列化单例本身,序列化单例所作用的底层数据。下面是一些内容 // assume that the signleton is actually implemented correctly. public class IHateSingletons

我正在实现某种类型的通讯录,并希望将所有联系人保存在某种由我自己实现的数据库中,作为singleton
HashMap contactsDB
。可以序列化这样的对象吗?

查看java API。如果您的自定义类实现了“serializable”,我认为您很好

不要序列化单例本身,序列化单例所作用的底层数据。

下面是一些内容

// assume that the signleton is actually implemented correctly.
public class IHateSingletons
{
  Map<String, Contact> contactMap;

  public void storeThatStuffs(final ObjectOutputStream outputStream)
  {
    outputStream.writeObject(contactMap);
  }

  public void readThatStuffs(final ObjectInputStream inputStream)
  {
    contactMap = (Map<String, Contact>)inputStream.readObject();
}
//假设signleton实际上实现正确。
公共类ihatesingleton
{
地图联络图;
public void storethattuff(最终对象输出流输出流)
{
outputStream.writeObject(contactMap);
}
public void readthattuff(最终目标输入流输入流)
{
contactMap=(Map)inputStream.readObject();
}

请注意,如果您这样做,您将提供一种绕过类的单例性的方法(代码不再需要通过getObject方法来确保只创建一个对象,它不能单独地将序列化对象反序列化到).

@Jak:是的,Ruby文档在这里很有用。删除了…我的错误…:(哦,如果我有超过100/1000/10000个contac,将每个contac反序列化到HashMap中会怎么样?cpu和内存不是太多吗?如果联系人是一个有联系人详细信息的人,10000个联系人将不会占用大量内存/cpu/存储空间,除非您使用的是资源有限的移动设备……如果每个联系人使用256字节,哟你可以在1 GB中存储400万个联系人。如果你花1000美元购买一台16 GB的机器,它可以使用普通哈希映射存储4000多万个联系人。如果你想存储5000万到50亿个联系人,我有一个不同的解决方案。;)大量联系人(如,太多,无法放入内存)将表明此实现(hooty singleton)这是一个糟糕的选择。在这种情况下,请使用真实的数据库。