Markørgrensesnitt og dype kopier - 1

"Hei, Amigo!"

"Hei, Bilaabo!"

"I dag skal jeg fortelle deg om markørgrensesnitt ."

"Markør-grensesnitt er grensesnitt uten metoder. Når en klasse implementerer et slikt grensesnitt, sier vi at det er merket av det."

"Eksempler på disse grensesnittene inkluderer: Klonbar, Serialiserbar, Remote ."

"Serialiseringsgrensesnittet brukes til å merke klasser som støtter serialisering, noe som indikerer at forekomster av disse klassene kan serialiseres og deserialiseres automatisk."

"Det eksterne grensesnittet brukes til å identifisere objekter som støtter ekstern kjøring, dvs. metoder som kan påkalles fra en annen virtuell Java-maskin og/eller en annen datamaskin."

" Cloneable- grensesnittet brukes til å merke klasser som støtter kloning."

"Å, om kloning eller kopiering."

"Det er to typer kopiering: grunt og dypt."

" Grunn kopiering er å lage en kopi av et objekt, uten å lage duplikater av noen av objektene det refererer til."

" Dypkopiering innebærer å duplisere et objekt, inkludert objekter det refererer til, og objektene som disse objektene refererer til, etc."

"Det er en veldig god måte å pålitelig lage en dyp klone."

"Denne metoden fungerer selv om utviklere har glemt å merke en klasse som Cloneable. "Det eneste kravet er at objektene må være serialiserbare."

"Slik gjør du det:"

1) Lag en buffer (byte array) i minnet.

2) Serialiser objektet og underobjektene inn i bufferen.

3) Deserialiser objekthierarkiet som er lagret i bufferen.

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

"I den første linjen lager vi objectOriginal , som vi vil klone. Objektet og alle dets underobjekter må støtte serialisering."

"På den tredje linjen lager vi en ByteArrayOutputStream , som vil utvides dynamisk etter hvert som nye data legges til (som en ArrayList)."

"I linje 4 lager vi en ObjectOutputStream , som brukes til serialisering."

"I linje 5 serialiserer vi objectOriginal til en byte-array ved å bruke outputStream og lagrer den i writeBuffer ."

"I linje 8 konverterer vi writeBuffer til en vanlig byte-matrise. Senere vil vi "lese" vårt nye objekt fra denne matrisen."

"I linje 9 transformerer vi buffer til en ByteArrayInputStream for å lese fra den som en InputStream."

"I linje 10 sender vi readBuffer til ObjectInputStream- konstruktøren for å lese (deserialisere) objektet."

"I linje 11 leser vi objektet vårt og konverterer det til et BigObject ."

"Hva tror du?"

"Det er vakkert."

"Og forresten, når koden er uthevet i forskjellige farger, er det mye lettere å forstå."