"Hei, Amigo! Jeg vil gjerne legge til litt til det Ellie fortalte deg."
Noen ganger må du kontrollere serialiseringsprosessen. Her er noen av grunnene til det:
1) Et objekt er ikke klart for serialisering : dets nåværende interne tilstand er i ferd med å endres.
2) Et objekt inneholder ikke-serialiserbare objekter, men kan konvertere dem til en form som lett kan serialiseres , f.eks. lagre dem som en byte-array eller noe annet.
3) Et objekt ønsker å deserialisere alle sine data som én enhet og/eller å kryptere dem før serialisering.
Det er mange grunner til at du kanskje vil utføre serialisering manuelt. Men vi ønsker ikke å miste alle fordelene som standard serialisering gir. Tross alt kan objektet vårt bruke andre objekter. Men de kan ikke serialiseres hvis objektet vårt ikke støtter serialisering.
Denne situasjonen har også en løsning: det eksterne grensesnittet. Vi må takke Javas visjonære skapere. Bare bytt ut Serializable- grensesnittet med Externalizable -grensesnittet, og klassen din kan administrere serialiseringsprosessen manuelt.
Det eksternaliserbare grensesnittet har to metoder, som det serialiserede grensesnittet ikke gjør, som kalles opp av Java-maskinen når et objekt serialiseres. Slik ser det ut:
class Cat implements Externalizable
{
public String name;
public int age;
public int weight;
public void writeExternal(ObjectOutput out)
{
out.writeObject(name);
out.writeInt(age);
out.writeInt(weight);
}
public void readExternal(ObjectInput in)
{
name = (String) in.readObject();
age = in.readInt();
weight = in.readInt();
}
}
Minner du om noe?
"Holy moly! Dette er nøyaktig hvordan vi prøvde å redde objekter før vi vurderte serialisering."
"Dette gjør alt enkelt: hvis standard serialisering er tilstrekkelig, arver vi bare Serializable- grensesnittet. Hvis det ikke er tilstrekkelig, så arver vi Externalizable og skriver vår egen kode for å lagre/laste objektet vårt."
"Men regnes en klasse merket med Eksternaliserbar som serialiserbar? Kan vi bruke en slik klasse til å "trygt" lagre referanser til våre serialiserbare klasser?
"Ja. Hvis en klasse implementerer Serializable eller Externalizable , anses den som serialiserbar."
"Det er den perfekte løsningen. Jeg liker det."
"Det er jeg glad for å høre. Men det er mer... Du bør spørre professor Hans om alle nyansene. De finnes absolutt. Han ville gi deg noe å lese."
GO TO FULL VERSION