Wir wissen bereits, dass zwei Objekte einer Klasse, wenn sie dieselbe Referenz haben, dieselben Entitäten und Funktionen haben, wie zum Beispiel:
Aone=newA();Atwo=one;
Nehmen Sie an, dass Klasse A eine int-Mitgliedsvariable mit dem Namen x hat. Führen Sie dann die folgenden Operationen aus:
zwei.x=100;
Dann beträgt der Wert von one.x ebenfalls 100.
In einem anderen Beispiel ist der Parameter einer bestimmten Methode vom Typ „Personen“:
publicvoidf(Peoplep){px=200;}
Wenn beim Aufruf dieser Methode ein Verweis auf ein Objekt von People, z. B. zhang, an den Parameter P übergeben wird, beträgt der Wert von zhang.x nach Ausführung der Methode ebenfalls 200.
Manchmal möchten Sie eine „Kopie“ eines Objekts erhalten. Änderungen an der Kopieentität führen nicht zu Änderungen an der ursprünglichen Objektentität und umgekehrt. Eine solche Kopie wird als Klonobjekt des Originalobjekts oder einfach als Klon bezeichnet.
Es ist einfach, mithilfe von Objektströmen einen Klon eines serialisierten Objekts zu erhalten. Schreiben Sie das Objekt einfach an das Ziel, auf das der Objektausgabestrom zeigt, und verwenden Sie dieses Ziel dann als Quelle eines Objekteingabestroms, der dann von der Quelle liest. Das zurückgegebene Objekt muss ein Klon des ursprünglichen Objekts sein, d. h. der Objekteingabestream erhält über die Serialisierungsinformationen des Objekts einen Klon des aktuellen Objekts. Beispielsweise ist das Objekt xinfei im Beispiel im vorherigen Abschnitt ein Klon des Objekts changhong.
Wenn ein Programm schneller einen Klon eines Objekts erhalten möchte, kann es einen Objektstream verwenden, um die Serialisierungsinformationen des Objekts in den Speicher zu schreiben, anstatt sie in eine Datei auf der Festplatte zu schreiben. Der Objektstream verwendet den Array-Stream als zugrunde liegenden Stream, um die Serialisierungsinformationen des Objekts in den Speicher zu schreiben. Als Beispiel können wir das Beispiel im vorherigen Abschnitt nehmen
FileOutputStreamfileOut=newFileOutputStream(file);ObjectOutputStreamobjectOut=newObjectOutputStream(fileOut);
Und
FileInputStreamfileIn=newFileInputStream(file);ObjectInputStreamobjectIn=newObjectInputStream(fileIn);
Ändern zu:
ByteArrayOutputStreamoutByte=newByteArrayOutputStream();ObjectOutputStreamobjectOut=newObjectOutputStream(outByte);
Und
ByteArrayInputStreaminByte=newByteArrayInputStream(outByte.toByteArray());ObjectInputStreamobjectIn=newObjectInputStream(inByte);
Die Component-Klasse im java.awt-Paket ist eine Klasse, die die Serializable- Schnittstelle implementiert. Daher kann das Programm die Komponente in den Ausgabestream schreiben und dann den Eingabestream verwenden, um einen Klon davon zu lesen Komponente.