Vector serialisieren: StackOverflow

Status
Nicht offen für weitere Antworten.

Isaac

Bekanntes Mitglied
Moin,
ich habe hier einen Generator der aus einem XML Schema Java Klassen erzeugt. Seit langem wollte ich um diesen Kommandozeilengenerator endlich mal ne GUI stricken. Gesagt getan hab ich das dann auch gemacht.

Der Generator selber ist zweigeteilt. Er sammelt Imformationen aus dem Schema in einen Vector und erzeugt dann aus dem Vector im Moment nur Java Klassen (C Klassen sind geplant). Die eigentliche Zeit geht beim Sammeln der Informationen drauf da das XML Schema 1,2MB gross ist und sehr viele Vergleiche, Schleifen etc durchlaufen werden. Ich dachte mir also, es sei vieleicht eine gute Idee wenn man diesen Vector einfach serialisiert um ihn dann beim nächsten Programmstart einfach einlesen zu können und sich so die Zeit zum Parsen zu sparen. Ich habe also einfach erstmal überall wo benötigt das Serializeable interface implementiert und dann einen Thread gestartet der den Vector innerhalb der GUI rausschreibt..

Erst hab ich es nur mit newThread() versucht was mir eine StackoverflowException eingebracht hat. Aber auch den Stack zu erhöhen brachte keinen Erfolg (siehe unten, im Moment irgendwas bei 14MB wenn der Parameter denn Bytes sind)

Hat jemand nen Tip für mich wie ich meinen Vector raus bekomme? Der ist recht gross, in dem Vector werden alle Paramter für knapp 500 Klassen gehalten.

Gruss,
Isa

Edit: Der gesammte Stacktrace ist sicher 6 Seiten lang

Code:
    public void actionPerformed(ActionEvent e)
    {
        if(e.getSource() == menuItem_serializeData)
        {
            new Thread(null, null, "Thread-" + Thread.activeCount() + 1, 15242880)
            {
                
                public void run()
                {
                    try
                    {
                        Vector v = getComplexTypeList().getListButtonPanel().getVCore();
                        ObjectOutputStream objOut = new ObjectOutputStream(
                                                                           new BufferedOutputStream(
                                                                                  new FileOutputStream("C:/test.ser")));
                        objOut.writeObject(v); 
                        objOut.close();
                    }
                    catch (FileNotFoundException fnfe)
                    {
                        fnfe.printStackTrace();
                    }
                    catch (IOException ioe)
                    {
                        ioe.printStackTrace();
                    }
                }
            }.start();
        }
    }

Code:
java.lang.StackOverflowError
	at java.io.ObjectOutputStream$BlockDataOutputStream.write(ObjectOutputStream.java:1601)
	at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1323)
	at java.io.ObjectOutputStream.defaultWriteObject(ObjectOutputStream.java:367)
	at org.apache.xerces.dom.NodeImpl.writeObject(NodeImpl.java:2026)
	at sun.reflect.GeneratedMethodAccessor8.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:324)
	at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:795)
	at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1294)
	at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1245)
	at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1052)
 
B

bygones

Gast
mhm - ich glaube Heap size erhoehen hilft nur bedingt wenn ueberhaupt.... der error wird geworfen, wenn die rekursionstiefe einer Anwendung zu tief ist.
wie sind denn deine Objekte im Vector organisiert ? sind die atomar oder auch wieder mit unterobjekten die womoeglich verkettet sind oder so ?

Ich wuesste momentan aber leider keine andere moeglichkeit als versuchen nicht den vektor sondern die objekte zu serialisieren ?!

habe ich noch nicht gemacht, aber vielleicht hilft dir mehr http://java.sun.com/j2se/1.4.2/docs/api/java/io/Externalizable.html weiter ?![/code]
 

Isaac

Bekanntes Mitglied
Der Vector ist recht fett, naja eignetlich ist er Megafett. Dort sind wirklich alle Informationen wieder in Objekten organisiert wie man sie auch im Schema des XMLs findet. Das macht es einfacher danach die Informationen zu verwalten wenn die Klassen erzeugt werden.

Danke für den Link, Externalizable kannte ich noch garnicht. Schau ich mir gleich mal an.
 

thE_29

Top Contributor
Hätte da ne Frage am Rande!


Ist es in Java nicht möglich einfach Objekte abzuspeichern ohne sie zu serialisieren, so wie in C mit FWrite und Fread
??

Gibts denn sowas, weil mich fuckt das serialisieren in dem java an! Bisher der größte Nachteil der mir aufgefallen ist!
 
B

bygones

Gast
thE_29 hat gesagt.:
Hätte da ne Frage am Rande!
Ist es in Java nicht möglich einfach Objekte abzuspeichern ohne sie zu serialisieren, so wie in C mit FWrite und Fread
??Gibts denn sowas, weil mich fuckt das serialisieren in dem java an! Bisher der größte Nachteil der mir aufgefallen ist!
Nein ist es nicht !
ausserdem - in 9 von 10 faellen reicht ein einfaches implements Serializable aus - was ist daran ein Nachteil ?
 

thE_29

Top Contributor
das ich in allen Programmen das jetzt nachziehen kann, nur weil ich 1 Objekt abspeichern will!

Das ist der Nachteil! Warum muss es implements serializable sein?

Wenn es nicht einfach reicht die dumme Struktur abzuspeichern, sowas ärgerliches
 
B

bygones

Gast
thE_29 hat gesagt.:
Wenn es nicht einfach reicht die dumme Struktur abzuspeichern, sowas ärgerliches
mhm - ich weiss nicht genau wie c das speichern handhabt - aber in java ist das ebenso... schau dir mal die Methode writeObject bzw. readObject in den Klassen ObjectOutputStream bzw. ObjectInputStream an.... es geht nun einfach nicht einfach so mal kurz abspeichern.....

nimms oder lass es sein
 

semi

Top Contributor
Kann es sein, dass Dein XML-Schema Zyklen hat?
In den Fall schreibt sich das ObjectOutputStream 'nen Wolf.

z.B. zwei Objekte A und B

A werweist auf B
B werweist auf A

Keins davon ist transient oder static.
Folge: Endlosschleife -> StackOverflow.
 

Isaac

Bekanntes Mitglied
Ja daran hab ich auch schon gedacht. Aber ich weiss es nicht. Der Vector ist auch einfach zu gross um mal eben reinzuschauen. Der Generator an sich ist schon 2 Jahre alt. Ich werde aber mal schauen ob ich das irgendwie glatt gezogen bekommen.


Heute lief eh alles schief, ich hatte noch so viel platz im GUI und dachte ich zeige das Schema gleich mit an, natürlich mit XML Syntax Highlightning. Als Grundlage benutzt ich einen Artikel bzw einen Beispielcode von

http://www.javamagazin.de/itr/online_artikel/psecom,id,364,nodeid,11.html


Aber sowohl das Beispielprogramm als auch meine implementierung (die vom verfahren ja nicht weiter unterschiedlich sind) machen bei dem 1,2MB Schema dicke backen. Out of Memory Error :roll:


War nicht mein Tag heute :wink:
 

thE_29

Top Contributor
ich hab da so ein TableLayout was bei jeder Klasse das stehen hat

Code:
public class TableLayout implements
    java.awt.LayoutManager2,
    Serializable, ....
Nur wenn ich es dann abspeichern will (eigentlich eine andere Klasse, das ist nur ein Objekt was angelegt wird)

Code:
java.io.NotSerializableException: info.clearthought.layout.TableLayout$Entry
	at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1054)
	at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:278)
	at java.util.LinkedList.writeObject(LinkedList.java:681)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:324)
	at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:795)
	at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1294)
	at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1245)
	at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1052)
	at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1330)
	at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1302)
	at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1245)
	at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1052)
	at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1330)
	at java.io.ObjectOutputStream.defaultWriteObject(ObjectOutputStream.java:367)
	at java.awt.Container.writeObject(Container.java:2765)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:324)
	at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:795)
	at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1294)
	at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1245)
	at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1052)
	at java.io.ObjectOutputStream.writeArray(ObjectOutputStream.java:1224)
	at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1050)
	at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1330)
	at java.io.ObjectOutputStream.defaultWriteObject(ObjectOutputStream.java:367)
	at java.awt.Container.writeObject(Container.java:2765)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:324)
	at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:795)
	at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1294)
	at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1245)
	at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1052)
	at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:278)
	at java.awt.AWTEventMulticaster.saveInternal(AWTEventMulticaster.java:857)
	at java.awt.AWTEventMulticaster.save(AWTEventMulticaster.java:866)
	at java.awt.Component.writeObject(Component.java:6830)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:324)
	at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:795)
	at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1294)
	at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1245)
	at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1052)
	at java.io.ObjectOutputStream.writeArray(ObjectOutputStream.java:1224)
	at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1050)
	at java.io.ObjectOutputStream.writeArray(ObjectOutputStream.java:1224)
	at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1050)
	at java.io.ObjectOutputStream.writeArray(ObjectOutputStream.java:1224)
	at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1050)
	at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1330)
	at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1302)
	at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1245)
	at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1052)
	at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:278)
	at at.dstore.Menu.PosMButton.doProg(PosMButton.java:349)
	at at.dstore.Menu.PosMButton.checkToStart(PosMButton.java:479)
	at at.dstore.Menu.PosMButton$2.mouseReleased(PosMButton.java:118)
	at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:228)
	at java.awt.Component.processMouseEvent(Component.java:5134)
	at java.awt.Component.processEvent(Component.java:4931)
	at java.awt.Container.processEvent(Container.java:1566)
	at java.awt.Component.dispatchEventImpl(Component.java:3639)
	at java.awt.Container.dispatchEventImpl(Container.java:1623)
	at java.awt.Component.dispatchEvent(Component.java:3480)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:3450)
	at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3165)
	at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3095)
	at java.awt.Container.dispatchEventImpl(Container.java:1609)
	at java.awt.Window.dispatchEventImpl(Window.java:1590)
	at java.awt.Component.dispatchEvent(Component.java:3480)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:450)
	at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:197)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:144)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:136)
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:99)

Warum passiert den sowas?

Obwohl ich es stehen hab!
 
B

bygones

Gast
die Klasse TableLayout hat eine innere Klasse "Entry" - die willst du serialisieren, aber sie implementiert nicht Serializable.

Es ist aber nicht ratsam Swing komponenten zu serialiseren - man sollte eigentlich nur die daten die sie halten serialisieren
 

thE_29

Top Contributor
danke ;) obwohl man selber draufkommen hätte können!

aber was nun?

Code:
java.io.NotSerializableException: java.net.SocketInputStream
	at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1054)
	at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1330)

:bahnhof:
 

Isaac

Bekanntes Mitglied
Ich konnte das Problem lösen, im Vector waren 3 Klassen in denen wiederum je eine Klasse agregiert wurde. Diese 3 agregierten Klassen habe ich transient gemacht. An stellen wo diese Klassen später noch zur Informationsbeschaffung genutzt wurden habe ich die Berechungen vor die Serialisierung verlegt und das Ergebniss der Berechnungen als String int etc in den Vector gelegt.

Jetzt habe ich nen hübsches Vector Objekt von 850 KByte und statt 3-5 Minuten das XML Schema zu parsen lade ich es einfach in 2 Sekunden von der Platte.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
A Vector Strings in Array splitten Allgemeine Java-Themen 6
G Fehler mit Vector Allgemeine Java-Themen 3
M String Array Vector komprimieren und verschicken Allgemeine Java-Themen 3
P Vectorelemente in einen anderen Vector kopieren Allgemeine Java-Themen 12
U Vector aus Oberklasse spezialisieren Allgemeine Java-Themen 2
R Vector in JList Allgemeine Java-Themen 11
M Cast double[]-->Object[] oder Vector<double[]> Allgemeine Java-Themen 3
R Threads korrekte Synchronisation bei Vector und ArrayList Allgemeine Java-Themen 6
H Index Out of Bounds bei Vector Allgemeine Java-Themen 4
H Java Vector Frage Allgemeine Java-Themen 9
E NetBeans Vector durch ArrayList ersetzen Allgemeine Java-Themen 4
C Vector/Point-Problem Allgemeine Java-Themen 3
M Buffer-Vector einzeln und zusammen synchronisieren Allgemeine Java-Themen 4
B Suchalgorithmus der Klasse Vector Allgemeine Java-Themen 5
X Vector Allgemeine Java-Themen 3
S 2D Vector speziell ausgeben. Allgemeine Java-Themen 2
S Vector in Vector gespeichert, wie greift man darauf zu? Allgemeine Java-Themen 3
C Swing JTable Vector aus DB adden Allgemeine Java-Themen 3
R Vector.clear() oder neu initialisieren Allgemeine Java-Themen 3
S vector & strings Allgemeine Java-Themen 26
X Vector in Intervall-Menge umwandeln Allgemeine Java-Themen 4
D Array oder Vector in Enum Deklarieren Allgemeine Java-Themen 3
J Erweiterte For-Schleife mit Vector Allgemeine Java-Themen 5
G JComponent in Vector - wie klonen? Allgemeine Java-Themen 7
V Performancefrage int-Vector/Stack Allgemeine Java-Themen 10
N HashMap<String,Vector<String>> a = new HashMap<String,Vector<String>>(); Allgemeine Java-Themen 4
H GUI: RectangleDrawer - zu viele Elemente im Vector für die paint-Methode Allgemeine Java-Themen 6
S JList in Vector Allgemeine Java-Themen 3
I Vector mit Objekten sortieren,Videos mit JMF wiedergeben Allgemeine Java-Themen 6
MQue Vector<..> nicht verwenden Allgemeine Java-Themen 4
H Vector<Character> zu char[] castern Allgemeine Java-Themen 2
T Element aus Vector entfernen Allgemeine Java-Themen 4
Spot84 Vector nach Ressourcetyp sortieren Allgemeine Java-Themen 4
M get Funktion von Vector Allgemeine Java-Themen 4
N wie greife ich auf hashmap in vector zu Allgemeine Java-Themen 9
V NullPointerException bei Vector Allgemeine Java-Themen 2
E einfache Frage zu Vector Allgemeine Java-Themen 8
K Serialisierung von Hashmap in Vector Allgemeine Java-Themen 3
G Vector beim Initialisieren befüllen Allgemeine Java-Themen 4
G Vector addAll Allgemeine Java-Themen 5
B sorteiren von Datein nach Zeitstempel in einem Vector Allgemeine Java-Themen 5
W [solved] Vector sortieren (Collection / Comparable?) Allgemeine Java-Themen 7
MQue Vector Allgemeine Java-Themen 7
F Vector in eine Datenbank speichern? Allgemeine Java-Themen 3
P Vector auf JTree Allgemeine Java-Themen 6
P dynamisches Array / Vector Allgemeine Java-Themen 2
P JTable/Vector Allgemeine Java-Themen 5
T Vector und remove? Allgemeine Java-Themen 13
T Vector in JAVA ? Allgemeine Java-Themen 10
P Vector in vielen Klassen Allgemeine Java-Themen 21
MQue Vector implementieren Allgemeine Java-Themen 2
MQue Vector<State> Allgemeine Java-Themen 2
O hilfe bei Vector frage Allgemeine Java-Themen 6
F Synchronisation + Vector/ArrayList/LinkedList Allgemeine Java-Themen 7
Z Elemente in Vector nach Häufigkeit sortieren. Allgemeine Java-Themen 13
H java.util.Vector langsam ? Allgemeine Java-Themen 5
H Vector<T>[] vecs = new Vector<T>[10]; geht nicht Allgemeine Java-Themen 2
N Java API java.util.vector Allgemeine Java-Themen 3
G Vector erweitern Allgemeine Java-Themen 4
S Vector sortieren nach Objekt-Info? Allgemeine Java-Themen 9
A Probleme mit Vector Allgemeine Java-Themen 6
M Vergleich im geordeten Vector und Methodenaufruf Allgemeine Java-Themen 2
J Vector - Wert ersetzen Allgemeine Java-Themen 14
J Vector - Boolean Allgemeine Java-Themen 24
M Vector zu einem byte[] Allgemeine Java-Themen 5
J Vector<Shape> Speichern [gelöst] Allgemeine Java-Themen 11
Y Array mit ID in Vector Allgemeine Java-Themen 6
T Vector <-> double Allgemeine Java-Themen 4
T ArrayList bzw. Vector per set-Methode? Allgemeine Java-Themen 3
T ArrayList oder Vector als Parameter? Allgemeine Java-Themen 7
M Vector add() unchecked? Allgemeine Java-Themen 5
M Probleme und Zeitdruck: Kunden-DB (Vector) Allgemeine Java-Themen 13
T Vector Array Allgemeine Java-Themen 5
M Kunden-DB mit Vector Allgemeine Java-Themen 9
J Vector sortieren Allgemeine Java-Themen 3
M Vector - contain Allgemeine Java-Themen 13
C String und char[] / String[] und Vector Allgemeine Java-Themen 21
N Vector -> 2Diminsonaler Array Allgemeine Java-Themen 10
N Alledateien in einem Ordner in ein Vector speichern Allgemeine Java-Themen 19
K Object nach Vector konvertieren Allgemeine Java-Themen 3
Z ResultSet in Array oder Vector schreiben! Allgemeine Java-Themen 2
C vector von vector sortieren Allgemeine Java-Themen 4
D Vector in String Allgemeine Java-Themen 5
J Von Collection zu vector Allgemeine Java-Themen 5
D Vector in Datei schreiben Allgemeine Java-Themen 18
H Vector in ein File-Array umwandeln Allgemeine Java-Themen 2
J User Klasse in den Vector, Object Klasse wieder raus... Allgemeine Java-Themen 4
K vector, synchronized und mehrere methoden Allgemeine Java-Themen 3
M Objekt serialisieren/deserialisieren und in einer SQLite-Datenbank speichern Allgemeine Java-Themen 3
OnDemand Objekte serialisieren Allgemeine Java-Themen 3
B Mehrere Objekte verschlüsselt serialisieren Allgemeine Java-Themen 6
D Problem mit Referenzen beim Serialisieren Allgemeine Java-Themen 3
J Methoden Fehler beim serialisieren und laden!? help Allgemeine Java-Themen 4
X Objekte aus TableModel serialisieren und deserialisieren Allgemeine Java-Themen 4
J Bilddaten serialisieren Allgemeine Java-Themen 7
B Zertifikat des Users speichern (serialisieren oder kopieren) Allgemeine Java-Themen 2
A Dateien Serialisieren Allgemeine Java-Themen 50
G Objekte serialisieren Allgemeine Java-Themen 2
MQue Serialisieren von Objecten Allgemeine Java-Themen 6
J Ein Objekt mehrfach serialisieren Allgemeine Java-Themen 2

Ähnliche Java Themen

Neue Themen


Oben