JavaRush /Kurslar /All lectures for TK purposes /Serializasiýa. Başlangyç.

Serializasiýa. Başlangyç.

All lectures for TK purposes
Dereje , Sapak
Elýeterli

— Häzir obýektleri faýla saklamak we faýldan okamak hakda gürrüň edendigimizi ýadyňdamy?

— Hawa, ýöne biz akym çykaryşa geçirýärdik, a okaýan akym girizme bolýar.

— Sen öňe gitdiň, Amigo. Muny dogry düşündigiňe çendenaşa hoşal boldum. Faýla saklamagy we faýldan okaýmagy kod ýüzünde tamamlaňokmy?

— Onda näme gerek? FileInputStream we FileOutputStream yglan edip, olary save & load metodlaryna geçiripsiň. Bu ýerde hiç zat bulaşdyrmaz – hemme zat ýönekeý.

— Men seniň üçin begenýärin. Şu ýerde täze tema – serializasiýa.

Serializasiýa – bu biz täze edendigimiz ýaly, diňe birneme has ajaýyp we Java-masynyna göni goşulan zat. Java-masyn öz obýektlerini saklap we ýükläp biler. Munuň üçin oňa save & load metodlary-da gerek däl: ähli obýektler Java-masynda saklanýar we olara doly elýeterliligi bar.

Biz diňe obýekti alyp, ony akyma saklaýarys / akymdan okaýarys:

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

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

 //load 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;
}

— Hemmelimi?

— Hawa. Ol ýerde serializasiýanyň uly we çylşyrymly mehanizmi bar, bu akyma saklamak we akymdan okamak üçin ähli maglumat görnüşlerini diýen ýaly goldaýar.

— Diýen ýaly, bu hemmeler dälmi?

— Hawa, sebäbi her obýekt öz tebigaty boýunça saklanylyp bilmeýär. Käbir obýektler ähli maglumatlaryny özünde saklamaýarlar, diňe beýleki obýektlere we/ýa-da maglumat çeşmelerine salgylanýarlar. Mysal üçin, konsol (System.in), akym girizmesi (InputStream) ýa-da başga bir zat.

Şonuň üçin Java işläp düzüjiler ýörite marker interfeýs – Serializable oýlap tapdylar. Ony marker diýýärler, sebäbi ol hiç hili maglumat we usul ýok. Ol diňe sinflary «bellik etmek» (markirlemek) üçin ulanylýar. Eger biz biziň sinfimiz ähli maglumatlaryny özünde saklaýandygyna ynansomyz, onda biz ol markeri – implements Serializable ýazyp bileris.

«Pişik» mysaly serializasiýa bilen:

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

Haýsydyr bir obýekti serializirläp (saklamak) synanyşanymyzda, Java-masyn tassyklap görýär – ol serializasiýany goldaýarmy: ol Serializable interfeýsini amala aşyrýarmy? Eger şeýle bolsa, obýekti saklaýar, bolmasa – serializasiýanyň mümkin däldigi boýunça çykaryş zyňýar.
Bu ýerde düşünmek gerek, serializirläp boljak obýekt hem serializirläp boljak obýektlerden durmalydyr.

— Bu garaşylyan zatdy. Bir böleklerini saklamaga saklamanda bütüni saklap bolmaz.

— Hut şeýle.

— Int, String, ArrayList görnüşleri nähili hemmesini?

— Olaryň hemmesi serializasiýany goldaýar, bu meselede Java işläp düzüjiler ýörite alada etdiler. Bu ýerde mesele bolmaly däl.

Has giň bol, obýektiň görnüşi serializirläniňde hem saklanýar. Indi sen obýekt Cat-e salgylanmaga Object synfynyň görnüşindäki üýtgeýji saklap bilersiň we ähli zady ajaýyp serializirläp we deserializirläp bolar.

— Deserializirläp?

Deserializasiýa – bu serializasiýanyň tersi proses – akymdan/faýldan okamak we obýekti dikeltmek diýilýär.

— Indi soraglaryň ýok.

Teswirler
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION