Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
 Аватар для RiG1
28 / 28 / 4
Регистрация: 12.03.2011
Сообщений: 474

Десериализация как метод класса

24.06.2013, 11:39. Показов 1251. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Пытаюсь сделать сериализацию и десериализацию как метод класса. С сериализацией все получилось
Java
1
2
3
4
5
6
7
public void serializable() throws IOException {
        FileOutputStream fos = new FileOutputStream(workDir + paths[0] + "/temp.out");
        ObjectOutputStream oos = new ObjectOutputStream(fos);
        oos.writeObject(this);
        oos.flush();
        oos.close();
    }
А с десериазизацией
Java
1
2
3
4
5
public void deserializable() throws IOException, ClassNotFoundException {
        FileInputStream fis = new FileInputStream(workDir + paths[0] + "/temp.out");
        ObjectInputStream oin = new ObjectInputStream(fis);
        this = (Project) oin.readObject();
    }
Выдается ошибка cannot assign a value to final variable this
Как это исправить?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
24.06.2013, 11:39
Ответы с готовыми решениями:

Как вызвать метод вложенного класса в методе родительского класса
Имеется родительский класс для прорисовки графики Jogj package objects; import com.jogamp.opengl.GL2; import...

Как передать входящее значение одного метода класса на возврат в другой метод того же класса?
Я самый новейший новичок. Помогите.Как передать входящее значение (количество еды) метода feed класса Cat на возврат(return) в метод...

Как в классе А у объекта класса B вызвать метод класса B ?
Есть Класс A и класс B . В классе B лежит объект типа ArrayList , назовём его arrayList, в этом же классе есть метод push() . Возможно ли...

8
 Аватар для AckiyBolt
653 / 402 / 35
Регистрация: 19.02.2013
Сообщений: 1,072
Записей в блоге: 2
24.06.2013, 12:18
никак. представьте что у вас рождается сын и вы пытаетесь сделать его собой. буквально. заменить себя на него в текущей точке пространства и времени. вы можете написать об этом фантастическое произведение, но в программировании, как и в объективной реальности такое сделать не получится.хотя конечно смотря что понимать под понятием "объективная реальность"...
0
 Аватар для Skipy
2000 / 1427 / 92
Регистрация: 25.11.2010
Сообщений: 3,611
24.06.2013, 13:03
Цитата Сообщение от RiG1 Посмотреть сообщение
Пытаюсь сделать сериализацию и десериализацию как метод класса.
А как Вы намереваетесь использовать эти методы? Покажите код. Интересует десериализация.
0
 Аватар для mutagen
2587 / 2260 / 257
Регистрация: 14.09.2011
Сообщений: 5,185
Записей в блоге: 18
24.06.2013, 13:10
Цитата Сообщение от Skipy Посмотреть сообщение
А как Вы намереваетесь использовать эти методы?
да эт очевидно, подменить себя старого - собой молодым )))
он почти решил задачу: как выучить С++ за 21 день )))
0
 Аватар для RiG1
28 / 28 / 4
Регистрация: 12.03.2011
Сообщений: 474
24.06.2013, 13:20  [ТС]
Понял свою ошибку, всем спасибо
0
 Аватар для Skipy
2000 / 1427 / 92
Регистрация: 25.11.2010
Сообщений: 3,611
24.06.2013, 14:38
Цитата Сообщение от RiG1 Посмотреть сообщение
Понял свою ошибку, всем спасибо
Не поняли. Существует вариант реализации почти что так, как Вы написали. Если бы Вы привели примеры использования - я бы его показал.

Более того, существует и возможность приведения состояния объекта, на который указывает this, к тому, что Вы считали. Не ссылку поменять, а сделать объект this идентичным тому, что было десериализовано. И вернуть при этом из метода десериализации не прочитанный объект, а именно this.
0
 Аватар для mutagen
2587 / 2260 / 257
Регистрация: 14.09.2011
Сообщений: 5,185
Записей в блоге: 18
24.06.2013, 15:00
обставлю Skipy на повороте )))
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.Objects;
 
/**
 * @author mutagen
 */
public class SerDeser implements Serializable {
 
    private String field1;
    private Integer field2;
 
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
 
        SerDeser canditate = new SerDeser("aa", 1);
        File f = new File("obj.tmp");
        canditate.serialize(f);
        System.out.println(canditate);
        
        canditate.setField1("bb");
        canditate.setField2(2);
 
        System.out.println(canditate);
        SerDeser deser = canditate.deserialize(f);
 
        System.out.println(canditate);
        
        System.out.println(canditate == deser);
        System.out.println(canditate.hashCode() == deser.hashCode());
        System.out.println(canditate.equals(deser));
 
    }
 
    public void serialize(File f) {
        ObjectOutputStream oos = null;
        try {
            oos = new ObjectOutputStream(new FileOutputStream(f));
            oos.writeObject(this);
        } catch (IOException ex) {
            ex.printStackTrace();
        } finally {
            if (oos != null) {
                try {
                    oos.close();
                } catch (IOException ex) {
                }
            }
        }
    }
 
    public SerDeser deserialize(File f) {
        ObjectInputStream ois = null;
        SerDeser tmp;
        try {
            ois = new ObjectInputStream(new FileInputStream(f));
            tmp = (SerDeser) ois.readObject();
            this.setField1(tmp.getField1());
            this.setField2(tmp.getField2());
        } catch (IOException ex) {
            ex.printStackTrace();
        } catch (ClassNotFoundException ex) {
            ex.printStackTrace();
        } finally {
            if (ois != null) {
                try {
                    ois.close();
                } catch (IOException ex) {
                }
            }
        }
        return this;
    }
 
    public SerDeser(String field1, Integer field2) {
        this.field1 = field1;
        this.field2 = field2;
    }
 
    public String getField1() {
        return field1;
    }
 
    public void setField1(String field1) {
        this.field1 = field1;
    }
 
    public Integer getField2() {
        return field2;
    }
 
    public void setField2(Integer field2) {
        this.field2 = field2;
    }
 
    @Override
    public String toString() {
        return "SerDeser{" + "field1=" + field1 + ", field2=" + field2 + '}';
    }
 
    @Override
    public int hashCode() {
        int hash = 7;
        hash = 59 * hash + Objects.hashCode(this.field1);
        hash = 59 * hash + Objects.hashCode(this.field2);
        return hash;
    }
 
    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final SerDeser other = (SerDeser) obj;
        if (!Objects.equals(this.field1, other.field1)) {
            return false;
        }
        if (!Objects.equals(this.field2, other.field2)) {
            return false;
        }
        return true;
    }
}
0
 Аватар для hoz
1 / 1 / 0
Регистрация: 25.08.2014
Сообщений: 104
21.02.2017, 15:37
Цитата Сообщение от Skipy Посмотреть сообщение
Не поняли. Существует вариант реализации почти что так, как Вы написали. Если бы Вы привели примеры использования - я бы его показал.
Более того, существует и возможность приведения состояния объекта, на который указывает this, к тому, что Вы считали. Не ссылку поменять, а сделать объект this идентичным тому, что было десериализовано. И вернуть при этом из метода десериализации не прочитанный объект, а именно this.
А как это реализовывается?
У меня возникла похожая видимо ситуация. Имеется вот такое определение и инициализация final переменной:
Code
1
        final TableModel tbCombi = Data.db.getTable(Consts.tbCombis);
Её необходимо вызывать в нескольких кейсах. Как-то так:
Code
1
2
3
4
5
6
7
8
swith(i)
{
  case 1:
        final TableModel tbCombi = Data.db.getTable(Consts.tbCombis);
  //---
  case 4:
        final TableModel tbCombi = Data.db.getTable(Consts.tbCombis);
}
При таком раскладе будет ругаться компилятор:
"PickupDeliveryAddress.java": cannot assign a value to final variable tbCombis at line 609, column 9
Вопрос, конечно решается переименование переменной, но как-то оно не вариант. Выходит, что будет пачка переменных с одинаковым контентом.. одной из таблиц из базы данных.
Как это реализовать красивее? Чтоб можно было в каждом кейсе оперировать переменной с одинакомых названием?
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,780
21.02.2017, 21:25
RiG1, вот тут пример: http://www.javapractices.com/t... n.do?Id=45
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
21.02.2017, 21:25
Помогаю со студенческими работами здесь

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

Как вызвать метод из класса библиотеки acm?
Вот этот метод например:

Как вызвать метод класса в основном классе
Имеется класс Main и класс Towers public class Main{ public static void main (String args) { } } public class...

Log4j как логировать только один метод из класса
Добрый день. Есть класс с несколькими методами. В нем объявлен лог: private static final Log log = LogFactory.getLog(Example.class); ...

Как заставить вызвать метод класса-родителя для объекта (полиморфизм)
класс BigFloat (длинные вещественные числа с учетом знака) наследуется от BigNum (целые положительные числа). Оба реализуют интерфейс Numb....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита табличной части. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru