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

interface Serializable

[es] :: Java :: interface Serializable

[ Pregleda: 4293 | Odgovora: 11 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

kruzer

Član broj: 919
Poruke: 46
*.panet.co.yu



Profil

icon interface Serializable18.01.2004. u 23:49 - pre 245 meseci
Može li neko da mi objasni zašto npr java.awt.Color implementira Serializable, a npr. GradientPaint ne?
Evo u čemu je problem. Naime radim neki program sa grafikom i napravio sam neku klasu koja između ostalih članova sadrži i referencu na interfejs java.awt.Paint koga implementiraju i java.awt.GradientPaint i java.awt.Color. E sad kad ja serijalizujem taj moj objekat serijalizacija prođe bez NotSerializableException kada je paint Color, a sa, tj. ne prođe kada je paint GradientPaint... sad moram da pravim neku besmislenu klasu koja će naslediti GradientPaint i implementirati serializable, ili neko ima bolju ideju....
argh!
 
Odgovor na temu

kruzer

Član broj: 919
Poruke: 46
*.panet.co.yu



Profil

icon Re: interface Serializable19.01.2004. u 20:52 - pre 245 meseci
Pa zar niko nema ideju, zašto je to tako?!

Da uprostim pitanje:
Kojim kriterijumom su se autori sun-ovih klasa rukovodili kada su birali koja klasa će da bude serializable a koja neće?
 
Odgovor na temu

StMilan

Član broj: 5061
Poruke: 144
*.ptt.yu



Profil

icon Re: interface Serializable21.01.2004. u 02:59 - pre 245 meseci
Generalno klase koje mogu da se serijalizuju su one za koje ima smisla to raditi, tj. one koje u sobi nose korisne informacije koje mogu da se zapamte i kasnije rekonstruisu, a ne one koje su tu samo da urade neki posao. GradientPaint koliko ja znam samo ofarba neki Shape u gradijent, a Color sadrzi korisne informacije (RGB komponente).

Naravno uvek mozes da kazes:

Code:
public class Nesto extends GradientPaint implements Serializable {...} 
 
Odgovor na temu

kruzer

Član broj: 919
Poruke: 46
*.panet.co.yu



Profil

icon Re: interface Serializable21.01.2004. u 15:33 - pre 245 meseci
Citat:
StMilan:
Generalno klase koje mogu da se serijalizuju su one za koje ima smisla to raditi, tj. one koje u sobi nose korisne informacije koje mogu da se zapamte i kasnije rekonstruisu, a ne one koje su tu samo da urade neki posao. GradientPaint koliko ja znam samo ofarba neki Shape u gradijent, a Color sadrzi korisne informacije (RGB komponente).


ne razumem te, pa uglavnom svaka klasa i sadrži korisne informacije i može da uradi neki posao... evo koja polja sadrži GradientPaint:
Code:

public class GradientPaint implements Paint {
     Point2D.Float p1;
     Point2D.Float p2;
     Color color1;
     Color color2;
     boolean cyclic;

po meni, samo zato što klasa Point2D.Float nije serijabilna GradientPaint nije isto, a zašto je to tako nemam pojma.... A najčudnije je što je klasa Point koja je podklasa Point2d.Float - serijabilna... ?@!@#$!

Citat:

Naravno uvek mozes da kazes:

Code:
public class Nesto extends GradientPaint implements Serializable {...} 


e ali kvaka je u tome što to neće da radi... ovo nije moguće zato što GradientPaint nema konstruktor bez argumenata koji je obavezan kada ovako nešto pokušaš.

Drugo kada nasleđuješ klasu koja nije serijabilna programer mora da vodi računa o zapisivanju i čitanju polja superklase a ne javin mehanizam. Ovde to i nije neki problem s obzirom da su ta polja "pristupačna" ali kod nekih sun-ovih klasa npr java.awt.geom.Area je to nemoguće pošto su ona privatna bez set/get metoda... barem ja to ne bih umeo da izvedem... pa evo pozivam sve ovde prisutne da me demantuju i naprave serijabilne java.awt.GradientPaint i java.awt.geom.Area. (podrazumeva se da nove klase nasleđuju ove)

pozdrav.
 
Odgovor na temu

StMilan

Član broj: 5061
Poruke: 144
*.ptt.yu



Profil

icon Re: interface Serializable21.01.2004. u 21:51 - pre 245 meseci
Point je klasa iz JDK 1.0 a Point2D je iz JDK 1.2 i kasnije. Point je u JDK 1.2 pa nadalje podklasa Point2D zbog kompatibilnosti sa ranijim verzijama. Slicno kao sto je zadrzano Graphics iako je garantovano u JDK 1.2 i kasnije da je svaki Graphics u stvari Graphics2D.

Nisam znao bas za ovu pricu o serializaciji. Probacu da smislim nesto.

Pretpostavljam da ti ovaj GradientPaint treba da bi zapamtio boju nekog objekta.
 
Odgovor na temu

StMilan

Član broj: 5061
Poruke: 144
*.ptt.yu



Profil

icon Re: interface Serializable21.01.2004. u 22:19 - pre 245 meseci
Mislim da je ovo resenje. U Javi postoji i interfej Externalizable, koji prosiruje Serializable.
Pogledaj njegov javadoc i bice ti sve jasno.
Resenje je otprilike ovako.

Code:

public class MojGradientPaint extends GradientPaint implements Externalizable {
    public void writeExternal(ObjectOutput out) {
        //ovde rucno ispises sta ti treba
    }
    public void readExternal(ObjectInput in) {
        //ovde iscitas
    }
}
 
Odgovor na temu

kruzer

Član broj: 919
Poruke: 46
*.panet.co.yu



Profil

icon Re: interface Serializable22.01.2004. u 11:44 - pre 245 meseci
ma ne radi... prijavljuje no valid konstruktor... to je zbog onog nepostojećeg no-arg konstrurktora...ma nema šanse da se odradi....
tražio sam malo o kriterijumima za proglašavanje neke klase serijabilnom i uglavnom nailazim na problem sigurnosti, što je razumljivo, ali ja stvarno ne vidim način zloupotrebe nekog serijalizovanog Point2D.Float-a... ????? mada opasni su danas ovi hakeri.... :)
 
Odgovor na temu

river
System Architect

Član broj: 12566
Poruke: 62
157.161.141.*



+1 Profil

icon Re: interface Serializable22.01.2004. u 16:01 - pre 245 meseci
Probaj da sacuvas podatke pomocu kojih kreiras u kodu gradient. A sam
gradient postavi da bude transient.
Onda implementiraj readObject, moras i writeObject, pa onda pravi gradient
kada deserijalizujes objekat.
Neki pseudo kod bi bio sledeci:

Code:

|private void writeObject(java.io.ObjectOutputStream out) throws IOException
{
|    out.writeFloat(x1);
|    out.writeFloat(x2);
|    out.writeObject(color1);
|    out.writeFloat(y1);
|    out.writeFloat(y2);
|    out.writeObject(color2);
}

private void readObject(java.io.ObjectInputStream in) throws IOException,
ClassNotFoundException {
|    x1 = in.readFloat();
|    x2 = in.readFloat();
|    color1 = (Color) in.readObject();
|    y1 = in.readFloat();
|    y2 = in.readFloat();
|    color2 = (Color) in.readObject();
|    gradient = new GradientPaint(x1, y1, color1, x2, y2, color2);
}


Uz kod dolazi pretpostavka da se nalazi u nekoj klasi koja samo ima potrebu
da od svog stanja serijalizuje GradientPaint.


Everything should be made as simple as possible, but not simpler. - AA
 
Odgovor na temu

river
System Architect

Član broj: 12566
Poruke: 62
157.161.141.*



+1 Profil

icon Re: interface Serializable22.01.2004. u 16:09 - pre 245 meseci
Naravno klasa koja implementira gore navedene metode mora da implementira
java.io.Serializable interfejs.


Everything should be made as simple as possible, but not simpler. - AA
 
Odgovor na temu

kruzer

Član broj: 919
Poruke: 46
*.panet.co.yu



Profil

icon Re: interface Serializable22.01.2004. u 18:55 - pre 245 meseci
jedino što ta nova klasa nije GradientPaint pošto je ne nasleđuje... ali ok, mislim da ću se nekako snaći i sa ovim, hvala... evo, stvarno je kompozicija moćnija od nasleđivanja... ,)

 
Odgovor na temu

StMilan

Član broj: 5061
Poruke: 144
*.ptt.yu



Profil

icon Re: interface Serializable22.01.2004. u 20:07 - pre 245 meseci
Mislim da mozes lepo da prodjes ako ta tvoja klasa implementira Paint, posto to GradientPaint implementira. Onda samo te metode iz interfejsa Paint (ima ih samo dva) prosledis GradientPaintu i to je to. Ne verujem da postoji bilo koji metod koji kao parametar ima bas GradientPaint, verovatno svi koriste Paint.
 
Odgovor na temu

kruzer

Član broj: 919
Poruke: 46
*.panet.co.yu



Profil

icon Re: interface Serializable22.01.2004. u 23:44 - pre 245 meseci
Citat:
StMilan:
Mislim da mozes lepo da prodjes ako ta tvoja klasa implementira Paint, posto to GradientPaint implementira. Onda samo te metode iz interfejsa Paint (ima ih samo dva) prosledis GradientPaintu i to je to. Ne verujem da postoji bilo koji metod koji kao parametar ima bas GradientPaint, verovatno svi koriste Paint.


e ljudi stvarno ste majstori... kombinacijom riverove i StMilanove ideje nastaje klasa koju bi sun stvarno trebalo da uvrsti u Tiger ,) evo ja sam samo iskodirao, testirao i krstio ;)

hvala i pozdrav svima.
Prikačeni fajlovi
 
Odgovor na temu

[es] :: Java :: interface Serializable

[ Pregleda: 4293 | Odgovora: 11 ] > FB > Twit

Postavi temu Odgovori

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