2012-02-24 4 views
0

Я реализую какой-то адресной книжки и хочу сохранить все контакты в какой-то БД, реализованные мною как одноэлементный HashMap<String, Contact> contactsDB. Можно ли сериализовать такой объект?Как сериализовать одноэлементный объект?

+4

@Jak: Да, документация Ruby здесь помогает. – skaffman

+0

Удалено ... Моя ошибка ... :(oops – Jak

ответ

0

вот некоторые вещи

// 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(); 
} 
+0

Большое количество контактов (как и слишком, чтобы поместиться в память) укажет, что эта реализация (hooty singleton) является ужасным выбором. В этом случае используйте реальную базу данных. – DwB

0

Ознакомьтесь с API java serializable. Если ваш пользовательский класс реализует «сериализуемый», я думаю, что вы в порядке

0

Не сериализуйте сам синглтон, сериализуйте базовые данные, на которых действует одноэлементный код.

+0

И что, если у меня есть более 100/1000/10000 контактов, десериализуйте их каждый в HashMap? Разве это не слишком много для процессора и памяти? – 4lex1v

+0

Если контакт человек с контактными данными, 10000 контактов не будут использовать большой объем памяти/процессор/пространство для хранения, если вы не используете мобильное устройство с ограниченными ресурсами ... – assylias

+1

Если каждый контакт использует 256 байтов, вы можете хранить 4 миллиона из этих в 1 ГБ. Если вы купите 16-гигабайтную машину за 1000 долларов США, она сможет хранить более 40 миллионов контактов, используя простой HashMap. Если вы хотите хранить от 50 до 5 миллиардов, у меня есть другое решение для этого.;) –

2

не должно быть известно, что если вы сделаете это, вы предоставляете путь обогнуть одноплодной-Несс вашего класса (код больше не нужно через GetObject метод, который гарантирует, что создается только один объект, он не может, отдельно, де-сериализовать сериализованный объект).

Смежные вопросы