Мы уже знаем, что если два объекта класса имеют одну и ту же ссылку, то они имеют одни и те же сущности и функции, например:
Aone=newA();Atwo=один;
Предположим, что класс A имеет переменную-член int с именем x. Затем, если вы выполните следующие операции:
два.х=100;
Тогда значение one.x также будет равно 100.
Другой пример: параметр определенного метода имеет тип People:
publicvoidf(Peoplep){px=200;}
Если при вызове этого метода в параметр P передается ссылка на объект People, например zhang, то после выполнения метода значение zhang.x также будет равно 200.
Иногда вам нужно получить «копию» объекта. Изменения в копии объекта не приведут к изменениям в исходном объекте, и наоборот. Такая копия называется объектом-клоном исходного объекта или просто клоном .
Получить клон сериализованного объекта с помощью объектных потоков легко. Просто запишите объект в место назначения, указанное выходным потоком объекта, а затем используйте это место назначения в качестве источника входного потока объекта, который затем считывает из источника. Возвращаемый объект должен быть клоном исходного объекта, то есть входной поток объекта получает клон текущего объекта посредством информации о сериализации объекта. Например, объект xinfei в примере предыдущего раздела является клоном объекта changhong.
Когда программа хочет быстрее получить клон объекта, она может использовать объектный поток для записи информации о сериализации объекта в память, а не в файл на диске. Поток объектов использует поток массива в качестве базового потока для записи информации о сериализации объекта в память. Например, мы можем взять пример из предыдущего раздела.
FileOutputStreamfileOut = newFileOutputStream (файл); ObjectOutputStreamobjectOut = newObjectOutputStream (fileOut);
и
FileInputStreamfileIn = newFileInputStream (файл); ObjectInputStreamobjectIn = newObjectInputStream (fileIn);
Изменить на:
ByteArrayOutputStreamoutByte = newByteArrayOutputStream (); ObjectOutputStreamobjectOut = newObjectOutputStream (outByte);
и
ByteArrayInputStreaminByte = newByteArrayInputStream (outByte.toByteArray()); ObjectInputStreamobjectIn = newObjectInputStream (inByte);
Класс Component в пакете java.awt — это класс, реализующий интерфейс Serializable. Компонент представляет собой сериализованный объект . Таким образом, программа может записать компонент в выходной поток, а затем использовать входной поток для чтения клона . компонент.