Antarmuka penanda dan salinan dalam - 1

"Hai, Amigo!"

"Hai, Bilaabo!"

"Hari ini saya akan memberi tahu Anda tentang antarmuka penanda ."

"Antarmuka penanda adalah antarmuka tanpa metode. Ketika sebuah kelas mengimplementasikan antarmuka seperti itu, kami mengatakan bahwa itu ditandai olehnya."

"Contoh dari antarmuka ini meliputi: Cloneable, Serializable, Remote ."

" Antarmuka Serializable digunakan untuk menandai kelas yang mendukung serialisasi, yang menunjukkan bahwa turunan dari kelas ini dapat secara otomatis diserialisasi dan dideserialisasi."

" Antarmuka Jarak Jauh digunakan untuk mengidentifikasi objek yang mendukung eksekusi jarak jauh, yaitu metode yang dapat dipanggil dari mesin virtual Java lain dan/atau komputer berbeda."

" Antarmuka yang dapat dikloning digunakan untuk menandai kelas yang mendukung kloning."

"Oh, tentang kloning, atau penyalinan."

"Ada dua jenis penyalinan: dangkal dan dalam."

" Penyalinan dangkal adalah membuat salinan suatu objek, tanpa membuat duplikat dari objek mana pun yang dirujuknya."

" Penyalinan mendalam melibatkan duplikasi objek, termasuk objek yang direferensikan, dan objek yang direferensikan objek tersebut, dll."

"Ada cara yang sangat bagus untuk membuat tiruan yang dalam dengan andal."

"Metode ini berfungsi bahkan jika pengembang lupa menandai kelas sebagai Dapat Dikloning. Satu-satunya persyaratan adalah objek harus dapat diserialisasi."

"Begini caranya:"

1) Buat buffer (array byte) di memori.

2) Serialkan objek dan subobjek ke dalam buffer.

3) Deserialisasi hierarki objek yang disimpan dalam buffer.

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

"Di baris pertama, kita membuat objectOriginal , yang akan kita tiru. Objek dan semua subobjeknya harus mendukung serialisasi."

"Di baris ketiga, kami membuat ByteArrayOutputStream , yang akan berkembang secara dinamis saat data baru ditambahkan (seperti ArrayList)."

"Pada baris 4, kami membuat ObjectOutputStream , yang digunakan untuk serialisasi."

"Pada baris 5, kami membuat serial objectOriginal menjadi array byte menggunakan outputStream dan menyimpannya ke writeBuffer ."

"Di baris 8, kita mengubah writeBuffer menjadi array byte biasa. Nanti kita akan 'membaca' objek baru kita dari array ini."

"Pada baris 9, kami mengubah buffer menjadi ByteArrayInputStream untuk membacanya seperti InputStream."

"Sejalan 10, kami meneruskan readBuffer ke konstruktor ObjectInputStream untuk membaca (deserialisasi) objek."

"Di baris 11, kita membaca objek kita dan mengubahnya menjadi BigObject ."

"Bagaimana menurutmu?"

"Cantiknya."

"Dan omong-omong, saat kode disorot dengan warna berbeda, akan lebih mudah dipahami."