"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.
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å."
GO TO FULL VERSION