Antara muka penanda dan salinan dalam - 1

"Hai, Amigo!"

"Hai, Bilaabo!"

"Hari ini saya akan memberitahu anda tentang antara muka penanda ."

"Antara muka penanda ialah antara muka tanpa kaedah. Apabila kelas melaksanakan antara muka sedemikian, kami mengatakan bahawa ia ditandakan olehnya."

"Contoh antara muka ini termasuk: Boleh Diklon, Boleh Bersiri, Jauh ."

" Antara muka Serializable digunakan untuk menandakan kelas yang menyokong pensirilan, menunjukkan bahawa contoh kelas ini boleh disiri dan dinyahsiri secara automatik."

" Antara muka Jauh digunakan untuk mengenal pasti objek yang menyokong pelaksanaan jauh, iaitu kaedah yang boleh digunakan daripada mesin maya Java lain dan/atau komputer lain."

" Antara muka Boleh Diklon digunakan untuk menandakan kelas yang menyokong pengklonan."

"Oh, tentang pengklonan, atau penyalinan."

"Terdapat dua jenis penyalinan: cetek dan dalam."

" Penyalinan cetek ialah mencipta salinan objek, tanpa membuat pendua mana-mana objek yang dirujuknya."

" Penyalinan mendalam melibatkan penduaan objek, termasuk objek yang dirujuknya dan objek yang dirujuk oleh objek tersebut, dsb.

"Terdapat cara yang sangat baik untuk mencipta klon dalam dengan pasti."

"Kaedah ini berfungsi walaupun pembangun terlupa menandai kelas sebagai Boleh Diklon. "Satu-satunya keperluan ialah objek mesti boleh bersiri."

"Begini cara anda melakukannya:"

1) Buat penimbal (tatasusunan bait) dalam ingatan.

2) Serikan objek dan subobjek ke dalam penimbal.

3) Nyahserialisasi hierarki objek yang disimpan dalam penimbal.

Kod
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();

"Dalam baris pertama, kami mencipta objectOriginal , yang akan kami klon. Objek dan semua subobjeknya mesti menyokong serialisasi."

"Dalam baris ketiga, kami mencipta ByteArrayOutputStream , yang akan berkembang secara dinamik apabila data baharu ditambahkan (seperti ArrayList)."

"Dalam baris 4, kami mencipta ObjectOutputStream , yang digunakan untuk bersiri."

"Dalam baris 5, kami menyerikan objectOriginal ke dalam tatasusunan bait menggunakan outputStream dan menyimpannya ke writeBuffer ."

"Dalam baris 8, kami menukar writeBuffer kepada tatasusunan bait biasa. Kemudian kami akan 'membaca' objek baharu kami daripada tatasusunan ini."

"Dalam baris 9, kami menukar penimbal menjadi ByteArrayInputStream untuk membaca daripadanya seperti InputStream."

"Dalam baris 10, kami menghantar readBuffer kepada pembina ObjectInputStream untuk membaca (menyahserialisasi) objek."

"Dalam baris 11, kami membaca objek kami dan menukarnya kepada BigObject . "

"Apa pendapat kamu?"

"Ianya cantik."

"Dan omong-omong, apabila kod itu diserlahkan dalam warna yang berbeza, ia lebih mudah untuk difahami."