Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.net  
   

Die mobilen Seiten von c++.net:
https://m.c-plusplus.net

  
C++ Forum :: Java ::  Problem mit dem serialisieren von klassen     Zeige alle Beiträge auf einer Seite Auf Beitrag antworten
Autor Nachricht
FrankenDerStein
Unregistrierter




Beitrag FrankenDerStein Unregistrierter 15:37:36 02.09.2016   Titel:   Problem mit dem serialisieren von klassen            Zitieren

Guten Abend Kollegen der Algorithmen, ich habe ein kleines Problem in Java, im genaueren beim serialisieren von klassen.

ich habe folgende klasse geschrieben:

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
public class SaveAndLoad<T extends Serializable>
{
    private String dateiFilename;
    private File path;
    public T data = null;
 
    public SaveAndLoad(String filename, T aNew)
    {
        data = aNew;
        path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MOVIES);
        dateiFilename = filename; // TODO: check this
    }
 
    public void load()
    {
        File f = new File(path, dateiFilename);
        if (f.exists() && !f.isDirectory()) {
            try {
                FileInputStream fileIn = new FileInputStream(f);
 
                ObjectInputStream in = new ObjectInputStream(fileIn);
                Class<?> A = data.getClass();
                data = convertInstanceOfObject(in.readObject(), (Class<T>) A); // TODO: erste Exception hier
                in.close();
                fileIn.close();
            }
            catch (IOException i) {
                i.printStackTrace();
            }
            catch (ClassNotFoundException c) {
                System.out.println("'T' class not found");
                c.printStackTrace();
            }
        }
    }
 
    public void save()
    {
        try {
            FileOutputStream fileOut = new FileOutputStream(new File(path, dateiFilename));
            ObjectOutputStream out = new ObjectOutputStream(fileOut);
            out.writeObject(data);
            out.flush();
            out.close();
            fileOut.close();
        }
        catch (IOException i) {
            i.printStackTrace();
        }
    }
 
    public static <T> T convertInstanceOfObject(Object o, Class<T> clazz)
    {
        try {
            return (T) o;
//            return clazz.cast(o);
        }
        catch (ClassCastException e) {
            return null;
        }
    }
}


Diese Klasse ist da um eine unbekannte Struktur zu lesen.

In meinem Fall ist ein Getter und Setter der aus 2 variablen dieser klasse bestehen:
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
public class TimeCalculator implements Serializable
{
    private static final long serialVersionUID = 465551445;
    private long begin, ende;
    private long zeitAbstand = 0;
    private boolean isLive = false, noLimit = false;
    private int status;
    private long lastTime = 0;
 
    public TimeCalculator()
    {
        status = enumtoint(TimerStatus.NOT_STARTED);
    }
 
    public void setInfos(long abZeit, long menge)
    {
        zeitAbstand = abZeit;
        if (isLive) {
            begin = new Date().getTime();
        }
        ende = begin + (abZeit * menge);
        noLimit = false;
    }
 
    public void setInfos(long abZeit)
    {
        if (!isLive) {
            begin = new Date().getTime();
        }
        zeitAbstand = abZeit;
        noLimit = true;
    }
 
    public TimerStatus getStatus()
    {
        getCount();
        return inttoemum(status);
    }
 
    public long getCount()
    {
        long time = new Date().getTime();
        if (isLive) {
            lastTime = time - begin;
            if (time >= ende && !noLimit) {
                status = enumtoint(TimerStatus.FINISH);
                isLive = false;
            }
        }
 
        return lastTime / zeitAbstand;
    }
 
    public boolean hasStarted()
    {
        getCount();
        return isLive;
    }
 
    public void start()
    {
        if (!isLive) {
            isLive = true;
            status = enumtoint(TimerStatus.RUNS);
            zeitAbstand = new Date().getTime();
        }
    }
 
    public void restart()
    {
        begin = new Date().getTime();
        status = enumtoint(TimerStatus.RESTARTED);
    }
 
    public void stop()
    {
        if (isLive) {
            isLive = false;
            if (status != enumtoint(TimerStatus.FINISH)) {
                status = enumtoint(TimerStatus.STOPPED);
            }
        }
    }
 
    private static TimerStatus inttoemum(int i)
    {
        switch (i) {
            case 0:
                return TimerStatus.NOT_STARTED;
            case 1:
                return TimerStatus.RUNS;
            case 2:
                return TimerStatus.FINISH;
            case 3:
                return TimerStatus.STOPPED;
            case 4:
            default:
                return TimerStatus.RESTARTED;
        }
    }
 
    private static int enumtoint(TimerStatus i)
    {
        switch (i) {
            case NOT_STARTED:
                return 0;
            case RUNS:
                return 1;
            case FINISH:
                return 2;
            case STOPPED:
                return 3;
            case RESTARTED:
            default:
                return 4;
        }
    }
}
 
enum TimerStatus implements Serializable
{
    RESTARTED,
    RUNS,
    NOT_STARTED,
    STOPPED,
    FINISH
}


leider will er es leider nicht machen und ich versteh nicht warum, es kommt immer eine java.io.NotSerializableException heraus.

Ich hoffe ihr könnt mir helfen.
swapper
Mitglied

Benutzerprofil
Anmeldungsdatum: 02.08.2016
Beiträge: 771
Beitrag swapper Mitglied 16:27:18 02.09.2016   Titel:              Zitieren

verschieb mal die enum "TimerStatus" in eine eigene datei. vielleicht liegts daran.

_________________
“It’s freezing and snowing in New York. We need global warming!” -- Donald J. Trump
NullBockException
Unregistrierter




Beitrag NullBockException Unregistrierter 05:10:28 05.09.2016   Titel:              Zitieren

Ist TimerStatus (enum) nich ein alias für ein int? brauchst man da da serial interface?

und bei dem Mapping Methoden könnte man doch auch einfach TimeStartus auf int casten (wenn die reihenfolge) past?
swapper
Mitglied

Benutzerprofil
Anmeldungsdatum: 02.08.2016
Beiträge: 771
Beitrag swapper Mitglied 17:55:13 06.09.2016   Titel:              Zitieren

NullBockException schrieb:
Ist TimerStatus (enum) nich ein alias für ein int? brauchst man da da serial interface?

nein, ein enum ist im grunde eine klasse.

_________________
“It’s freezing and snowing in New York. We need global warming!” -- Donald J. Trump
C++ Forum :: Java ::  Problem mit dem serialisieren von klassen   Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben.
Sie können auf Beiträge in diesem Forum antworten.
Sie können Ihre Beiträge in diesem Forum nicht bearbeiten.
Sie können Ihre Beiträge in diesem Forum nicht löschen.
Sie können an Umfragen in diesem Forum nicht mitmachen.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

c++.net ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de Werbekostenerstattung verdient werden kann.

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info und www.c-plusplus.net enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.