İşaretçi arayüzleri ve derin kopyalar - 1

"Merhaba, Amigo!"

"Merhaba, Bilaabo!"

"Bugün size işaretçi arayüzlerinden bahsedeceğim ."

"İşaretleyici arabirimler, yöntemsiz arabirimlerdir. Bir sınıf böyle bir arabirim uyguladığında, onun tarafından işaretlendiğini söyleriz."

"Bu arabirimlerin örnekleri şunları içerir: Cloneable, Serializable, Remote ."

" Seri hale getirilebilir arabirim, serileştirmeyi destekleyen sınıfları işaretlemek için kullanılır ve bu sınıfların örneklerinin otomatik olarak serileştirilebileceğini ve seri durumundan çıkarılabileceğini gösterir."

" Uzak arabirim, uzaktan yürütmeyi destekleyen nesneleri, yani başka bir Java sanal makinesinden ve/veya farklı bir bilgisayardan çağrılabilen yöntemleri tanımlamak için kullanılır."

" Klonlanabilir arayüz, klonlamayı destekleyen sınıfları işaretlemek için kullanılır."

"Ah, klonlama veya kopyalama hakkında."

"İki tür kopyalama vardır: sığ ve derin."

" Sığ kopyalama , referans verdiği nesnelerin hiçbirini çoğaltmadan bir nesnenin kopyasını oluşturmaktır."

" Derin kopyalama , referans verdiği nesneler ve bu nesnelerin referans verdiği nesneler vb. dahil olmak üzere bir nesnenin çoğaltılmasını içerir."

"Güvenilir bir şekilde derin bir klon oluşturmanın gerçekten iyi bir yolu var."

"Bu yöntem, geliştiriciler bir sınıfı Klonlanabilir olarak işaretlemeyi unutmuş olsalar bile çalışır. "Tek gereksinim, nesnelerin seri hale getirilebilir olmasıdır."

"İşte bunu nasıl yapacağınız:"

1) Bellekte bir arabellek (bayt dizisi) oluşturun.

2) Nesneyi ve alt nesneleri ara belleğe seri hale getirin.

3) Arabellekte kaydedilen nesne hiyerarşisinin serisini kaldırın.

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

"İlk satırda, klonlayacağımız objectOriginal öğesini oluşturuyoruz . Nesne ve tüm alt nesneleri serileştirmeyi desteklemelidir."

"Üçüncü satırda, yeni veriler eklendikçe (bir ArrayList gibi) dinamik olarak genişleyecek olan bir ByteArrayOutputStream oluşturuyoruz."

"4. satırda, serileştirme için kullanılan bir ObjectOutputStream oluşturuyoruz ."

"5. satırda, outputStream'i kullanarak objectOriginal'i bir bayt dizisine seri hale getiriyoruz ve onu writeBuffer'a kaydediyoruz . "

"8. satırda writeBuffer'ı sıradan bir bayt dizisine dönüştürüyoruz . Daha sonra yeni nesnemizi bu diziden 'okuyacağız'."

"9. satırda, ondan bir InputStream gibi okumak için arabelleği bir ByteArrayInputStream'e dönüştürüyoruz ."

"10. satırda, nesneyi okumak (serisini kaldırmak) için readBuffer'ı ObjectInputStream yapıcısına iletiyoruz ."

"11. satırda nesnemizi okuyoruz ve onu bir BigObject'e dönüştürüyoruz . "

"Ne düşünüyorsun?"

"Bu güzel."

"Bu arada, kod farklı renklerle vurgulandığında anlaşılması çok daha kolay."