"Du vil huske at vi i dag undersøkte å lagre objekter til og lese dem fra en fil?"

"Ja, vi har nettopp lagret til en utdatastrøm, en lesing fra en inngangsstrøm."

"Godt gjort, Amigo. Det er godt å høre at du legger merke til disse detaljene. Ville du kunne fullføre koden slik at den lagres til og leser fra en fil?"

"Fullfør hva?! Erklær en FileInputStream og FileOutputStream og send dem til lagrings- og lastemetodene. Det er ingenting å forvirre om her. Superenkelt."

"Jeg er glad på din vegne. Nå til et nytt emne: serialisering ."

Serialisering er nesten det samme som vi nettopp gjorde, men mye kulere og innebygd rett inn i Java-maskinen. Java-maskinen kan lagre og laste inn objektene sine. Den trenger ikke engang lagrings- og lastemetodene for å gjøre det: Alle objekter er lagret inne i Java-maskinen, og den har full tilgang til dem."

Vi tar bare objektet og lagrer det i en strøm og leser fra en strøm:

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?"

"Akkurat. Det er en veldig stor og kompleks serialiseringsmekanisme som lar oss lagre til en strøm og lese fra en strøm av nesten hvilken som helst datatype."

"Nesten alle. Så ingen datatype?"

"Ja, faktum er at ikke alle objekter har den iboende evnen til å bli lagret . Noen objekter lagrer ikke alle dataene sine internt. I stedet refererer de bare til andre objekter og/eller datakilder. For eksempel, konsollen (System. inn), en inngangsstrøm (InputStream) og andre ting."

Det er derfor Javas skapere kom opp med den spesielle Serializable- grensesnittmarkøren . Det kalles en markør , fordi den ikke inneholder noen data og metoder. Den brukes bare til å "merke" eller "merke" klasser. Hvis vi tror at klassen vår lagrer alle dataene internt, kan vi merke dem med implementer Serializable .

Her er et «katt»-eksempel med støtte for serialisering:

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

Når vi prøver å serialisere (lagre) et objekt, sjekker Java-maskinen om den støtter serialisering: Implementerer den Serializable-grensesnittet? Hvis den gjør det, lagrer den objektet. Hvis ikke, gir den et unntak for å indikere at serialisering er umulig.
Her må du forstå at et serialiserbart objekt bare må bestå av serialiserbare objekter.

"Vel, det gir mening. Du kan ikke redde helheten uten å lagre delene."

"Nøyaktig."

"Og hva med ints, Strings og ArrayLists?"

"De støtter alle serialisering. Javas skapere passet spesielt på at dette skjedde. Det burde ikke være noen problemer her."

Dessuten lagres et objekts type når objektet serialiseres. Nå kan du lagre en referanse til et Cat-objekt i en Object-variabel. Alt vil serialiseres og deserialiseres helt fint.

"Deserialisere?"

" Deserialisering er prosessen med å reversere serialisering: lesing og rekonstruering av et objekt fra en strøm/fil."

"Ah, ikke flere spørsmål da."