Nous savons déjà que si deux objets d'une classe ont la même référence, alors ils ont les mêmes entités et fonctions, telles que :
Aone=newA();Atwo=un;
Supposons que la classe A ait une variable membre int nommée x. Ensuite, si vous effectuez les opérations suivantes :
deux.x=100 ;
Alors la valeur de one.x sera également de 100.
Pour un autre exemple, le paramètre d'une certaine méthode est de type People :
publicvoidf(Personnes){px=200;}Si lors de l'appel de cette méthode, une référence à un objet de People, tel que zhang, est passée au paramètre P, alors la valeur de zhang.x sera également 200 après l'exécution de la méthode.
Parfois, vous souhaitez obtenir une « copie » d'un objet. Les modifications apportées à l'entité de copie n'entraîneront pas de modifications dans l'entité objet d'origine, et vice versa. Une telle copie est appelée un objet clone de l'objet original ou simplement un clone .
Il est facile d'obtenir un clone d'un objet sérialisé à l'aide de flux d'objets. Écrivez simplement l'objet vers la destination pointée par le flux de sortie d'objet, puis utilisez cette destination comme source d'un flux d'entrée d'objet, qui lit ensuite à partir de la source. L'objet renvoyé doit être un clone de l'objet d'origine, c'est-à-dire que le flux d'entrée de l'objet obtient un clone de l'objet actuel grâce aux informations de sérialisation de l'objet. Par exemple, l'objet xinfei dans l'exemple de la section précédente est un clone de l'objet changhong.
Lorsqu'un programme souhaite obtenir plus rapidement un clone d'un objet, il peut utiliser un flux d'objets pour écrire les informations de sérialisation de l'objet en mémoire au lieu de les écrire dans un fichier sur le disque. Le flux d'objets utilise le flux de tableau comme flux sous-jacent pour écrire les informations de sérialisation de l'objet en mémoire. Par exemple, nous pouvons prendre l'exemple de la section précédente
FileOutputStreamfileOut=newFileOutputStream(file);ObjectOutputStreamobjectOut=newObjectOutputStream(fileOut);
et
FileInputStreamfileIn=newFileInputStream(file);ObjectInputStreamobjectIn=newObjectInputStream(fileIn);
Remplacer par :
ByteArrayOutputStreamoutByte=newByteArrayOutputStream();ObjectOutputStreamobjectOut=newObjectOutputStream(outByte);
et
ByteArrayInputStreamByte=newByteArrayInputStream(outByte.toByteArray());ObjectInputStreamobjectIn=newObjectInputStream(inByte);
La classe Component du package java.awt est une classe qui implémente l'interface Serialisable. Le composant est donc un objet sérialisé . Par conséquent, le programme peut écrire le composant dans le flux de sortie, puis utiliser le flux d'entrée pour lire un clone du. composant.