Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Serijalizacija povezanih objekata

[es] :: Java :: Serijalizacija povezanih objekata

[ Pregleda: 4322 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

filmil
Filip Miletić
Oce Technologies B.V., inženjer
hardvera
Arcen, NL

Član broj: 243
Poruke: 2114
*.et.tudelft.nl.

Jabber: filmil@jabber.org
ICQ: 36601391


+3 Profil

icon Serijalizacija povezanih objekata23.11.2004. u 14:54 - pre 235 meseci
Neka su data četiri objekta a, b, c i d klase K i neka je K dato sa:

Code:
class K implements Serializable {
       K left;
       K right;
 
     public K(K left, K right) {
        this.left = left;
        this.right=right;
    }
      // itd...
 }


Negde u programu smo namestili nešto poput:

Code:
K d = new K(null, null);
 K c = new K(d, null);
 K b = new K(null, d);
 K a = new K(b, c);


U gornjem primeru, objekti b i c oba imaju reference na isti objekat d. Ako sada serijalizujem objekat a i kasnije ga pročitam, da li će da važi:

a.left.right == a.right.left

odn. da li serijalizacija čuva deljene reference?
 
Odgovor na temu

hyle
Perica Milošević
Belgrade

Član broj: 30030
Poruke: 150
*.yubc.net.

Sajt: www.linkedin.com/in/peric..


+4 Profil

icon Re: Serijalizacija povezanih objekata23.11.2004. u 15:30 - pre 235 meseci
Hoće, serializacija je dovoljno pametna da zaključi da je u pitanju i isti objekat (u primeru označen promenljivom "d") i da nema potrebe 2 puta da ga čuva.
Kod većih objekata bitno bi se povećala količina nepotrebnih podataka da nije tako.

Pozdrav

Code:
import java.io.*;

public class SerializationTest implements Serializable {

  static final String FILENAME = "test.tst";

  SerializationTest left;
  SerializationTest right;

  SerializationTest(SerializationTest l, SerializationTest r) {
    this.left = l;
    this.right = r;
  }

  public static void main(String args[]) {
    SerializationTest d = new SerializationTest(null, null);
    SerializationTest c = new SerializationTest(d, null);
    SerializationTest b = new SerializationTest(null, d);
    SerializationTest a = new SerializationTest(b, c);
    try {
      FileOutputStream outFile = new FileOutputStream(FILENAME);
      ObjectOutputStream out = new ObjectOutputStream(outFile);
      out.writeObject(a);
      out.flush();

      out.close();
      outFile.close();

      FileInputStream inFile = new FileInputStream(FILENAME);
      ObjectInputStream input = new ObjectInputStream(inFile);
      SerializationTest e = (SerializationTest)input.readObject();

      input.close();
      inFile.close();

      System.out.println("(e.left.right == e.right.left) = " + (e.left.right == e.right.left));
    } catch (Exception ex) {
      ex.printStackTrace();
    } 
  }
}
 
Odgovor na temu

-zombie-
Tomica Jovanovic
freelance programmer
ni.ac.yu

Član broj: 4128
Poruke: 3448
*.83.beocity.net.

Sajt: localhost


+5 Profil

icon Re: Serijalizacija povezanih objekata24.11.2004. u 13:06 - pre 235 meseci
jeste serijalizacija pametna, ali nije baš "inteligentna".. ;)

recimo, da posle objekata a kreiraš i objekat x sa istim parametrima..

Code:
K x = new K(b, c);


i ako serijalizuješ x odmah posle a, i posle ga vratiš odmah posle a, rezultat će biti sličan (x.left.right == x.right.left), ali neće važiti a.left==x.left, pošto objekti u svakoj serijalizaciji čine "univerzum za sebe"..

 
Odgovor na temu

filmil
Filip Miletić
Oce Technologies B.V., inženjer
hardvera
Arcen, NL

Član broj: 243
Poruke: 2114
*.et.tudelft.nl.

Jabber: filmil@jabber.org
ICQ: 36601391


+3 Profil

icon Re: Serijalizacija povezanih objekata24.11.2004. u 16:45 - pre 235 meseci
Citat:
ali neće važiti a.left==x.left, pošto objekti u svakoj serijalizaciji čine "univerzum za sebe"..
Šta razdvaja dve serijalizacije? Upis u različit stream ili poziv fje writeObject()?

f
 
Odgovor na temu

hyle
Perica Milošević
Belgrade

Član broj: 30030
Poruke: 150
*.yubc.net.

Sajt: www.linkedin.com/in/peric..


+4 Profil

icon Re: Serijalizacija povezanih objekata25.11.2004. u 10:15 - pre 235 meseci
Citat:
filmil: Šta razdvaja dve serijalizacije? Upis u različit stream ili poziv fje writeObject()?

Odvaja ih upis u različit stream.

Citat:
-zombie-: ...ako serijalizuješ x odmah posle a, i posle ga vratiš odmah posle a, rezultat će biti sličan (x.left.right == x.right.left), ali neće važiti a.left==x.left, pošto objekti u svakoj serijalizaciji čine "univerzum za sebe"..

Ovo je tačno samo ako koristimo različit stream za upis objekata a i x. Ukoliko objekat x serijalizujemo u i isti stream gde smo upisali i objekat a onda će važiti i a.left==x.left.

Ako baš hoćemo da odvojimo dve serijalizacije koje idu u isti stream onda koristimo metodu reset() klase ObjectOutputStream.

Pozdrav
 
Odgovor na temu

[es] :: Java :: Serijalizacija povezanih objekata

[ Pregleda: 4322 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.