как мы можем сериализовать синглтон? Я думаю, что мы не можем

Я обнаружил много потоков, запущенных на stackoverflow.com для создания сериализации объекта SingleTon. А также специалисты предоставляют способ сериализации объекта Singleton.

По моему мнению, мы не можем сериализовать одноэлементный объект, даже если мы реализуем интерфейс Serializable,
потому что ссылочная переменная SingleTon является статической в ​​том же классе.
И API Serialization говорит, что мы не можем сериализовать или записать состояние статической ссылки в файл.
А также мы не можем сохранить состояние переходной переменной.
Во время процесса сериализации (фактический процесс записи) статические и временные переменные игнорируются.
Пожалуйста, дайте ваш ценный вклад, если я неправильно понял. Если я неправильно понял, может ли кто-нибудь помочь сериализовать объект Singleton с примером кода?

4 голоса | спросил AmitG 20 FebruaryEurope/MoscowbWed, 20 Feb 2013 17:03:10 +0400000000pmWed, 20 Feb 2013 17:03:10 +040013 2013, 17:03:10

3 ответа


0

да, статические ссылки не разделены. это не значит, что вы не можете взять значение статической ссылки (единичного экземпляра) и выбрать его сериализацию.

ответил jtahlborn 20 FebruaryEurope/MoscowbWed, 20 Feb 2013 17:05:28 +0400000000pmWed, 20 Feb 2013 17:05:28 +040013 2013, 17:05:28
0

Я думаю, что вы путаете способ реализации синглтона и способ сериализации объектов.

Хотя статическое поле, которое часто используется для реализации синглетонов, действительно не будет сериализовано как часть сериализации экземпляра, сам экземпляр определенно может быть сериализован. Все, что вам нужно сделать, это установить обратно десериализованную версию в статическое поле, что вам нужно будет сделать вручную в своем коде.

P.S. Обратите внимание, что я не говорю, что сериализация (или даже реализация) синглтона - это всегда хорошая идея, все, что я говорю, это то, что это можно сделать.

ответил dasblinkenlight 20 FebruaryEurope/MoscowbWed, 20 Feb 2013 17:06:28 +0400000000pmWed, 20 Feb 2013 17:06:28 +040013 2013, 17:06:28
0

Синглтоны можно сериализовать, и вот код, как это сделать:


import java.io.Serializable;

public class MySingleton implements Serializable {

    private MySingleton(String name) {
        this.name = name;
    }

    private static MySingleton mySingleton;

    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public static MySingleton getInstance(String name) {
        if(mySingleton == null) {
            System.out.println("in if...");
            mySingleton = new MySingleton(name);
        }

        return mySingleton;
    }
}

а вот метод "main", который получает экземпляр класса Singleton выше, сериализует и десериализует его:



 public static void main (String[] args) {

        MySingleton m = MySingleton.getInstance("Akshay");

        try {
            ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("D://temp.ser"));
            oos.writeObject(m);

            ObjectInputStream ois = new ObjectInputStream(new FileInputStream("D://temp.ser"));
            MySingleton m2 = (MySingleton) ois.readObject();
            System.out.println(m2.getName());
        } catch (IOException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }

    }

и вывод: -

  

в если ...

     

Акшай

Спасибо.

ответил Akshay Lokur 29 AMpTue, 29 Apr 2014 11:35:55 +040035Tuesday 2014, 11:35:55

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132