– Szia Amigo!
– Szia, Bilaabo!
"Ma a jelölőfelületekről fogok beszélni ."
"A marker interfészek metódus nélküli interfészek. Amikor egy osztály implementál egy ilyen interfészt, azt mondjuk, hogy az meg van jelölve."
"Példák ezekre az interfészekre: Klónozható, Sorosozható, Távoli ."
"A Serializable interfész a szerializálást támogató osztályok megjelölésére szolgál, jelezve, hogy ezen osztályok példányai automatikusan szerializálhatók és deszerializálhatók."
"A Remote interfész a távoli végrehajtást támogató objektumok azonosítására szolgál, azaz olyan metódusok, amelyek egy másik Java virtuális gépről és/vagy másik számítógépről hívhatók meg."
"A klónozható felület a klónozást támogató osztályok megjelölésére szolgál."
– Ó, a klónozásról vagy a másolásról.
"Kétféle másolás létezik: sekély és mély."
" A sekély másolás egy objektum másolatának létrehozása anélkül, hogy a hivatkozott objektumokról másolatokat készítene."
" A mélymásolás magában foglalja egy objektum megkettőzését, beleértve az objektumokat, amelyekre hivatkozik, és az objektumokat, amelyekre ezek az objektumok hivatkoznak, stb."
"Van egy nagyon jó módszer a mély klónok megbízható létrehozására."
"Ez a módszer akkor is működik, ha a fejlesztők elfelejtettek egy osztályt klónozhatóként megjelölni. "Az egyetlen követelmény az, hogy az objektumoknak szerializálhatónak kell lenniük."
"Íme, hogyan kell csinálni:"
1) Hozzon létre egy puffert (byte tömb) a memóriában.
2) Sorosítsa az objektumot és az alobjektumokat a pufferbe.
3) Deszerializálja a pufferben elmentett objektumhierarchiát.
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();
"Az első sorban létrehozzuk az objectOriginal -t , amelyet klónozni fogunk. Az objektumnak és minden alobjektumának támogatnia kell a szerializálást."
"A harmadik sorban létrehozunk egy ByteArrayOutputStream-et , amely dinamikusan bővül új adatok hozzáadásával (például egy ArrayList)."
"A 4. sorban létrehozunk egy ObjectOutputStream- et , amelyet a szerializáláshoz használunk."
"Az 5. sorban sorba rendezzük az objectOriginal fájlt egy bájttömbbe az outputStream segítségével , és elmentjük a writeBufferbe ."
"A 8. sorban a writeBuffert egy közönséges bájttömbbé alakítjuk át. Később ebből a tömbből fogjuk "beolvasni" az új objektumunkat."
"A 9. sorban a puffert ByteArrayInputStreammé alakítjuk át, hogy úgy olvassunk belőle, mint egy InputStreamből. "
"A 10. sorban a readBuffert átadjuk az ObjectInputStream konstruktornak, hogy beolvassa (deserializálja) az objektumot."
"A 11. sorban beolvassuk az objektumunkat, és BigObjectmé alakítjuk . "
"Mit gondolsz?"
"Ez gyönyörű."
– És mellesleg, ha a kód különböző színekkel van kiemelve, sokkal könnyebben érthető.
GO TO FULL VERSION