Mga interface ng marker at malalim na mga kopya - 1

"Hi, Amigo!"

"Hi, Bilaabo!"

"Ngayon sasabihin ko sa iyo ang tungkol sa mga interface ng marker ."

"Ang mga interface ng marker ay mga interface na walang mga pamamaraan. Kapag ang isang klase ay nagpapatupad ng ganoong interface, sinasabi namin na ito ay minarkahan nito."

"Kabilang sa mga halimbawa ng mga interface na ito ang: Cloneable, Serializable, Remote ."

" Ginagamit ang Serializable na interface upang markahan ang mga klase na sumusuporta sa serialization, na nagpapahiwatig na ang mga pagkakataon ng mga klase na ito ay maaaring awtomatikong i-serialize at deserialized."

" Ginagamit ang Remote na interface upang tukuyin ang mga bagay na sumusuporta sa malayuang pagpapatupad, ibig sabihin, mga pamamaraan na maaaring i-invoke mula sa isa pang Java virtual machine at/o ibang computer."

" Ginagamit ang Cloneable na interface upang markahan ang mga klase na sumusuporta sa pag-clone."

"Oh, tungkol sa pag-clone, o pagkopya."

"Mayroong dalawang uri ng pagkopya: mababaw at malalim."

" Ang mababaw na pagkopya ay gumagawa ng kopya ng isang bagay, nang hindi gumagawa ng mga duplicate ng alinman sa mga bagay na tinutukoy nito."

" Ang malalim na pagkopya ay nagsasangkot ng pagdoble ng isang bagay, kabilang ang mga bagay na tinutukoy nito, at ang mga bagay na tinutukoy ng mga bagay na iyon, atbp."

"May isang talagang mahusay na paraan upang mapagkakatiwalaang lumikha ng isang malalim na clone."

"Gumagana ang pamamaraang ito kahit na nakalimutan ng mga developer na markahan ang isang klase bilang Cloneable. "Ang tanging kinakailangan ay dapat na serializable ang mga bagay."

"Narito kung paano mo ito gagawin:"

1) Lumikha ng buffer (byte array) sa memorya.

2) I-serialize ang object at mga subobject sa buffer.

3) Deserialize ang object hierarchy na na-save sa buffer.

Code
BigObject objectOriginal = new BigObject();

ByteArrayOutputStream writeBuffer = new ByteArrayOutputStream();
ObjectOutputStream outputStream = new ObjectOutputStream(writeBuffer);
outputStream.writeObject(objectOriginal);
outputStream.close();

byte[] buffer = writeBuffer.toByteArray();
ByteArrayInputStream readBuffer = new ByteArrayInputStream(buffer);
ObjectInputStream inputStream = new ObjectInputStream(readBuffer);
BigObject objectCopy = (BigObject)inputStream.readObject();

"Sa unang linya, lumikha kami ng objectOriginal , na aming i-clone. Ang object at lahat ng mga subobject nito ay dapat na sumusuporta sa serialization."

"Sa ikatlong linya, lumikha kami ng ByteArrayOutputStream , na dynamic na lalawak habang nagdaragdag ng bagong data (tulad ng ArrayList)."

"Sa linya 4, gumawa kami ng ObjectOutputStream , na ginagamit para sa serialization."

"Sa linya 5, ini-serialize namin ang objectOriginal sa isang byte array gamit ang outputStream at i-save ito sa writeBuffer ."

"Sa linya 8, kino-convert namin ang writeBuffer sa isang ordinaryong byte array. Mamaya ay 'basahin' namin ang aming bagong object mula sa array na ito."

"Sa linya 9, binabago namin ang buffer sa isang ByteArrayInputStream upang mabasa mula dito tulad ng isang InputStream."

"Sa linya 10, ipinapasa namin ang readBuffer sa ObjectInputStream constructor para basahin (deserialize) ang object."

"Sa linya 11, binabasa namin ang aming object at i-convert ito sa isang BigObject ."

"Ano sa tingin mo?"

"Ang ganda."

"At sa pamamagitan ng paraan, kapag ang code ay naka-highlight sa iba't ibang kulay, ito ay mas madaling maunawaan."