„Здрасти, Амиго!“
„Здравей, Билаабо!“
„Днес ще ви разкажа за интерфейсите на маркерите .“
"Маркерните интерфейси са интерфейси без методи. Когато клас имплементира такъв интерфейс, казваме, че той е маркиран от него."
„Примерите за тези интерфейси включват: Cloneable, Serializable, Remote .“
„ Интерфейсът Serializable се използва за маркиране на класове, които поддържат сериализация, което показва, че екземплярите на тези класове могат да бъдат автоматично сериализирани и десериализирани.“
„ Отдалеченият интерфейс се използва за идентифициране на обекти, които поддържат отдалечено изпълнение, т.е. методи, които могат да бъдат извикани от друга Java виртуална машина и/or друг компютър.“
„ Интерфейсът Cloneable се използва за маркиране на класове, които поддържат клониране.“
— О, относно клонирането or копирането.
„Има два вида копиране: плитко и дълбоко.“
" Плиткото копиране е създаване на копие на обект, без да се правят дубликати на който и да е от обектите, към които препраща."
" Дълбокото копиране включва дублиране на обект, включително обекти, към които той препраща, и обекти, които тези обекти препращат, и т.н."
„Има наистина добър начин за надеждно създаване на дълбок клонинг.“
"Този метод работи дори ако разработчиците са забравor да маркират клас като Cloneable. "Единственото изискване е обектите да могат да се сериализират."
„Ето How го правите:“
1) Създайте буфер (byteов масив) в паметта.
2) Сериализирайте обекта и подобектите в буфера.
3) Десериализирайте йерархията на обекта, записана в буфера.
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();
"В първия ред създаваме objectOriginal , който ще клонираме. Обектът и всичките му подобекти трябва да поддържат сериализация."
„В третия ред създаваме ByteArrayOutputStream , който ще се разширява динамично, когато се добавят нови данни (като ArrayList).“
„В ред 4 създаваме ObjectOutputStream , който се използва за сериализиране.“
„В ред 5 ние сериализираме objectOriginal в byteов масив с помощта на outputStream и го запазваме в writeBuffer .“
"В ред 8 преобразуваме writeBuffer в обикновен byteов масив. По-късно ще" прочетем "новия ни обект от този масив."
„В ред 9 трансформираме буфера в ByteArrayInputStream , за да четем от него като InputStream.“
„В ред 10 предаваме readBuffer на конструктора ObjectInputStream , за да прочете (десериализира) обекта.“
„В ред 11 четем нашия обект и го конвертираме в BigObject . “
"Какво мислиш?"
"Красиво е."
„И между другото, когато codeът е подчертан в различни цветове, е много по-лесно за разбиране.“
GO TO FULL VERSION