"Sampeyan bakal kelingan yen dina iki kita nyelidiki nyimpen obyek lan maca saka file?"

"Ya, kita mung disimpen menyang stream output, diwaca saka stream input."

"Inggih, Amigo. Iku apik kanggo krungu sing lagi nggatekake rincian iki. Apa sampeyan bisa ngrampungake kode supaya nyimpen lan maca saka file?"

"Ngrampungake apa ?! Pratelan FileInputStream lan FileOutputStream lan pass menyang nyimpen lan mbukak cara. Ana apa-apa kanggo bingung bab kene. Super prasaja."

"Aku seneng karo sampeyan. Saiki kanggo topik anyar: serialization ."

Serialization meh padha apa kita mung nindakake, nanging akeh adhem lan dibangun langsung menyang mesin Jawa. Mesin Java bisa nyimpen lan mbukak obyek kasebut. Malah ora mbutuhake cara nyimpen lan mbukak kanggo nindakake: Kabeh obyek disimpen ing mesin Java, lan nduweni akses lengkap.

Kita mung njupuk obyek lan nyimpen menyang stream lan maca saka 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;
}

"Lha iku?"

"Persis. Ana mekanisme serialization gedhe banget lan Komplek sing ngijini kita nyimpen kanggo stream lan maca saka stream meh wae jinis data."

"Meh wae. Dadi ora ana jinis data?"

"Ya, kasunyatane ora kabeh obyek duwe kemampuan kanggo disimpen . Sawetara obyek ora nyimpen kabeh data sacara internal. Nanging, dheweke mung ngrujuk obyek lan / utawa sumber data liyane. Contone, console (System. ing), aliran input (InputStream), lan liya-liyane."

Pramila para pangripta Jawa nggawe panandha antarmuka Serializable khusus . Iki diarani panandha , amarga ora ngemot data lan metode. Iku mung digunakake kanggo "tag" utawa "mark" kelas. Yen kita percaya yen kelas kita nyimpen kabeh data kasebut sacara internal, mula kita bisa menehi tandha nganggo implements Serializable .

Punika conto «kucing» kanthi dhukungan kanggo serialisasi:

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

Nalika kita nyoba kanggo serialize (nyimpen) obyek, mriksa mesin Jawa apa ndhukung serialization: Apa iku ngleksanakake antarmuka Serializable? Yen mengkono, banjur nyimpen obyek. Yen ora, banjur mbalang pangecualian kanggo nunjukaké sing serialization mokal.
Kene sampeyan kudu ngerti manawa obyek serializable mung kudu kalebu obyek serializable.

"Inggih, punika raos. Sampeyan ora bisa nyimpen kabèh tanpa nyimpen bagean sawijining."

"Pancen."

"Lan babagan ints, Strings, lan ArrayLists?"

"Dheweke kabeh ndhukung serialisasi. Pangripta Jawa ngati-ati kanggo mesthekake yen kedadeyan kasebut. Ora ana masalah ing kene."

Kajaba iku, jinis obyek disimpen nalika obyek kasebut serialized. Saiki sampeyan bisa nyimpen referensi menyang obyek Cat ing variabel Obyek. Kabeh bakal serialize lan deserialize mung nggoleki.

"Deserialize?"

" Deserialization minangka proses mbalikke serialisasi: maca lan mbangun maneh obyek saka stream / file."

"Ah, ora ana pitakonan maneh."