Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 4 odgovora
  • 5.379 pregleda

Najnovija ↓

Serijalizacija povezanih objekata 23.11.2004. u 15:54 · pre 267 meseci #1
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?
Re: Serijalizacija povezanih objekata 23.11.2004. u 16:30 · pre 267 meseci #2
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();
    } 
  }
}
Re: Serijalizacija povezanih objekata 24.11.2004. u 14:06 · pre 267 meseci #3
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"..
Potpis
blogče :: unescaped beta
  »
go-paste extenzija
  »
reč dana: backup
  »
bočne koalicije
Re: Serijalizacija povezanih objekata 24.11.2004. u 17:45 · pre 267 meseci #4
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
Re: Serijalizacija povezanih objekata 25.11.2004. u 11:15 · pre 267 meseci #5
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
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme