Markørgrænseflader og dybe kopier - 1

"Hej, Amigo!"

"Hej, Bilaabo!"

"I dag vil jeg fortælle dig om markørgrænseflader ."

"Markørgrænseflader er grænseflader uden metoder. Når en klasse implementerer en sådan grænseflade, siger vi, at den er markeret af den."

"Eksempler på disse grænseflader inkluderer: Klonbar, Serialiserbar, Remote ."

" Serialiseringsgrænsefladen bruges til at markere klasser, der understøtter serialisering, hvilket indikerer, at forekomster af disse klasser automatisk kan serialiseres og deserialiseres."

" Remote- grænsefladen bruges til at identificere objekter, der understøtter fjernudførelse, dvs. metoder, der kan påberåbes fra en anden virtuel Java-maskine og/eller en anden computer."

"Den klonbare grænseflade bruges til at markere klasser, der understøtter kloning."

"Åh, om kloning eller kopiering."

"Der er to typer kopiering: lavvandet og dybt."

" Shallow copying er at skabe en kopi af et objekt uden at lave duplikater af nogen af ​​de objekter, det refererer til."

" Dyb kopiering involverer duplikering af et objekt, inklusive objekter, det refererer til, og de objekter, som disse objekter refererer til osv."

"Der er en rigtig god måde at skabe en dyb klon på pålideligt."

"Denne metode virker, selvom udviklere har glemt at markere en klasse som kloningsbar. "Det eneste krav er, at objekterne skal kunne serialiseres."

"Sådan gør du det:"

1) Opret en buffer (byte-array) i hukommelsen.

2) Serialiser objektet og underobjekterne i bufferen.

3) Deserialiser objekthierarkiet gemt 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 linje opretter vi objectOriginal , som vi vil klone. Objektet og alle dets underobjekter skal understøtte serialisering."

"På den tredje linje opretter vi en ByteArrayOutputStream , som udvides dynamisk, efterhånden som nye data tilføjes (som en ArrayList)."

"I linje 4 opretter vi en ObjectOutputStream , som bruges til serialisering."

"I linje 5 serialiserer vi objectOriginal til et byte-array ved hjælp af outputStream og gemmer det i writeBuffer ."

"I linje 8 konverterer vi writeBuffer til et almindeligt byte-array. Senere vil vi 'læse' vores nye objekt fra dette array."

"I linje 9 transformerer vi buffer til en ByteArrayInputStream for at læse fra den som en InputStream."

"I linje 10 sender vi readBuffer til ObjectInputStream- konstruktøren for at læse (deserialisere) objektet."

"I linje 11 læser vi vores objekt og konverterer det til et BigObject ."

"Hvad synes du?"

"Det er smukt."

"Og forresten, når koden er fremhævet i forskellige farver, er det meget nemmere at forstå."