"Du kan huske, at vi i dag undersøgte at gemme genstande til og læse dem fra en fil?"

"Ja, vi har lige gemt til en output-stream, en læsning fra en input-stream."

"Godt gået, Amigo. Det er godt at høre, at du bemærker disse detaljer. Ville du være i stand til at færdiggøre koden, så den gemmer til og læser fra en fil?"

"Fuldfør hvad?! Deklarer en FileInputStream og FileOutputStream og send dem til gemme- og indlæsningsmetoderne. Der er intet at blive forvirret over her. Super simpelt."

"Jeg er glad på din vegne. Nu til et nyt emne: serialisering ."

Serialisering er næsten det samme, som vi lige har gjort, men meget sejere og indbygget direkte i Java-maskinen. Java-maskinen kan gemme og indlæse dens objekter. Den behøver ikke engang gemme- og indlæsningsmetoderne for at gøre det: Alle objekter er gemt inde i Java-maskinen, og den har fuld adgang til dem."

Vi tager bare objektet og gemmer det i en stream og læser fra en stream:

Kode
public static void main(String[] args) throws Exception
{
 Cat cat = new Cat();

 //Save a cat to file
 FileOutputStream fileOutput = new FileOutputStream("cat.dat");
 ObjectOutputStream outputStream = new ObjectOutputStream(fileOutput);
 outputStream.writeObject(cat);
 fileOutput.close();
 outputStream.close();

 //Load a cat from file
 FileInputStream fiStream = new FileInputStream("cat.dat");
 ObjectInputStream objectStream = new ObjectInputStream(fiStream);
 Object object = objectStream.readObject();
 fiStream.close();
 objectStream.close();

 Cat newCat = (Cat)object;
}

"Det er det?"

"Nøjagtigt. Der er en meget stor og kompleks serialiseringsmekanisme , der lader os gemme til en stream og læse fra en strøm af næsten enhver datatype."

"Næsten alle. Så ikke nogen datatype?"

"Ja, faktum er, at ikke alle objekter har den iboende evne til at blive gemt . Nogle objekter gemmer ikke alle deres data internt. I stedet refererer de blot til andre objekter og/eller datakilder. For eksempel konsollen (System. in), en inputstrøm (InputStream) og andre ting."

Det er derfor, Javas skabere kom med den specielle Serializable- grænseflademarkør . Det kaldes en markør , fordi det ikke indeholder nogen data og metoder. Det bruges kun til at "mærke" eller "mærke" klasser. Hvis vi mener, at vores klasse gemmer alle sine data internt, så kan vi markere det med implementer Serializable .

Her er et «kat»-eksempel med understøttelse af serialisering:

Kode
class Cat implements Serializable
{
 public String name;
 public int age;
 public int weight;
}

Når vi forsøger at serialisere (gemme) et objekt, tjekker Java-maskinen, om den understøtter serialisering: Implementerer den Serializable-grænsefladen? Hvis den gør det, gemmer den objektet. Hvis ikke, giver den en undtagelse for at angive, at serialisering er umulig.
Her skal du forstå, at et serialiserbart objekt kun må bestå af serialiserbare objekter.

"Jamen, det giver mening. Du kan ikke redde helheden uden at gemme dens dele."

"Nemlig."

"Og hvad med ints, Strings og ArrayLists?"

"De understøtter alle serialisering. Javas skabere tog særlig omhu for at sikre, at dette skete. Der burde ikke være nogen problemer her."

Desuden gemmes et objekts type, når objektet serialiseres. Nu kan du gemme en reference til et Cat-objekt i en Object-variabel. Alt vil serialisere og deserialisere fint.

"Deserialisere?"

" Deserialisering er processen med at vende serialisering: læsning og rekonstruering af et objekt fra en strøm/fil."

"Åh, så ikke flere spørgsmål."