13. januar 2006 - 18:00
Der er
21 kommentarer
Gemme et objekt i en fil.
Er det muligt at gemme et objekt i en fil? Altså så når man "loader" filen ind, så indeholder det loadede objekt samme mængde data osv som da man gemte - dvs. også objekter oprettet inde i "hovedobjektet". Håber I forstår hvad jeg mener - det er lidt kringlet at skulle forklaare på skrift =)
Annonceindlæg fra DE-CIX
13. januar 2006 - 18:27
#1
serialisering enten normal binær serialisering eller XML serialisering
13. januar 2006 - 18:42
#2
13. januar 2006 - 18:48
#3
Tak :) Meget sjovt, lidt efter jeg havde skrevet indlægget fandt jeg selv ovenstående side som beskriver det perfekt!
13. januar 2006 - 18:56
#4
der er lidt forskellige regler for binær serialisering og XML serialisering
13. januar 2006 - 18:56
#5
Hmm jeg får en exception når jeg prøver at gøre det. java.io.NotSerializableException Ved I hvad det kan være?
13. januar 2006 - 18:57
#6
følgende viser forskellen: import java.util.*; import java.beans.*; import java.io.*; public class SerTest implements Serializable { public int a; private int b; private transient int c; private HashMap hm1; private HashMap hm2; public SerTest() { a = 0; b = 0; c = 0; hm1 = new HashMap(); hm2 = new HashMap(); } public SerTest(int a, int b, int c, String v) { this.a = a; this.b = b; this.c = c; hm1 = new HashMap(); hm2 = new HashMap(); hm1.put("k1", v); hm2.put("k2", v); } public int getB() { return b; } public int getC() { return c; } public HashMap getHm1() { return hm1; } public void setB(int b) { this.b = b; } public void setC(int c) { this.c = c; } public void setHm1(HashMap hm1) { this.hm1 = hm1; } public String toString() { return (a + " " + b + " " + c + " " + hm1 + " " + hm2); } public static void main(String[] args) throws Exception { SerTest st1 = new SerTest(1, 2, 3, "V"); XMLEncoder xe = new XMLEncoder(new FileOutputStream("C:\\xml.dat")); xe.writeObject(st1); xe.close(); XMLDecoder xd = new XMLDecoder(new FileInputStream("C:\\xml.dat")); SerTest st2 = (SerTest)xd.readObject(); System.out.println(st1 + " -> " + st2); ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("C:\\bin.dat")); oos.writeObject(st1); oos.close(); ObjectInputStream ois = new ObjectInputStream(new FileInputStream("C:\\bin.dat")); SerTest st3 = (SerTest)ois.readObject(); System.out.println(st1 + " -> " + st3); } }
13. januar 2006 - 18:58
#7
du mangler nok: implements Serializable på din klasse ...
13. januar 2006 - 18:59
#8
Altså den klasse for det objekt jeg vil gemme? Skal den også være på alle "underklasser" i hovedklassen?
13. januar 2006 - 19:00
#9
Får denne fejl når jeg tilføjer det du skrev: cannot find symbol symbol: class Serializable
13. januar 2006 - 19:03
#10
Hvilke metoder er der i interfacet?
13. januar 2006 - 19:07
#11
import java.io.Serializable;
13. januar 2006 - 19:08
#12
der er ingen metoder i interfacet det er kun en markering af at klassen kan serialiseres
13. januar 2006 - 19:08
#13
og ja - alle indeholdte objekter (bortset fra dem erklæret transient) skal også være serializable
13. januar 2006 - 19:13
#14
Så virker det =) Mange tak! Bare skriv et svar, så får du point.
13. januar 2006 - 19:24
#15
Nu har jeg så fået den til at gemme - men lige et spørgsmål: Når jeg så henter den ind, er der så en smart måde, at få den til at "opdatere" alle de referencer der nu er til det "gamle" objekt? I starten har jeg Functions f = new Functions() f er så reference til nogle paneler... Når jeg så loader ind, siger jeg f = "Det nye objekt" men så opdateres det ikke i alle panelerne... Hvis du forstår? =)
13. januar 2006 - 19:50
#16
Du skal måske kalde repaint() på panel'erne?
13. januar 2006 - 19:52
#17
Hjælper ikke - som om de stadig har referencen til det "gamle" Functionsobjekt.
13. januar 2006 - 19:57
#18
this.repaint(); ? blot et bud:)
13. januar 2006 - 19:59
#19
Hehe nej det er ikke fordi den ikke repainter... Det gør den automatisk. Den refererer stadig til det gamle Functionsobjekt.
13. januar 2006 - 20:33
#20
hmmm.. jeg tror faktisk ikke det kan lade sig gøre:/ Har lige siddet og leget lidt med det.. og det var ret umuligt. men du kan vel hive data ud fra dine objekter som du henter op og erstatte det som der står i dine gamle objekter.. Det tager længere tid, men det virker. ved brug af metodekald
13. januar 2006 - 20:37
#21
Jeps, har også løst det sådan.. Det er bare en lidt irriterende metode hvis der tilføjes noget i Functions.. Så skal man også tilføje noget i den "update" metode... Men det er i hvert fald løst og det virker nu :)
Kurser inden for grundlæggende programmering