Já sabemos que se dois objetos de uma classe possuem a mesma referência, então eles possuem as mesmas entidades e funções, tais como:
Aone=newA();Atwo=um;
Suponha que a classe A tenha uma variável de membro int chamada x.
dois.x=100;
Então o valor de one.x também será 100.
Para outro exemplo, o parâmetro de um determinado método é do tipo People:
publicvoidf(Pessoasp){px=200;}
Se ao chamar este método, uma referência a um objeto de Pessoas, como zhang, for passada para o parâmetro P, então o valor de zhang.x também será 200 após a execução do método.
Às vezes você deseja obter uma "cópia" de um objeto. Alterações na entidade de cópia não causarão alterações na entidade do objeto original e vice-versa. Essa cópia é chamada de objeto clone do objeto original ou simplesmente clone .
É fácil obter um clone de um objeto serializado usando fluxos de objetos. Basta gravar o objeto no destino apontado pelo fluxo de saída do objeto e, em seguida, usar esse destino como origem de um fluxo de entrada do objeto, que então lê a partir da origem. O objeto retornado deve ser um clone do objeto original, ou seja, o fluxo de entrada do objeto obtém um clone do objeto atual através das informações de serialização do objeto. Por exemplo, o objeto xinfei no exemplo da seção anterior é um clone do objeto changhong.
Quando um programa deseja obter um clone de um objeto mais rapidamente, ele pode usar um fluxo de objetos para gravar as informações de serialização do objeto na memória, em vez de gravá-las em um arquivo no disco. O fluxo de objetos usa o fluxo de array como fluxo subjacente para gravar as informações de serialização do objeto na memória. Por exemplo, podemos pegar o exemplo da seção anterior
FileOutputStreamfileOut=newFileOutputStream(arquivo);ObjectOutputStreamobjectOut=newObjectOutputStream(fileOut);
e
FileInputStreamfileIn=newFileInputStream(arquivo);ObjectInputStreamobjectIn=newObjectInputStream(fileIn);
Alterar para:
ByteArrayOutputStreamoutByte=newByteArrayOutputStream();ObjectOutputStreamobjectOut=newObjectOutputStream(outByte);
e
ByteArrayInputStreaminByte=newByteArrayInputStream(outByte.toByteArray());ObjectInputStreamobjectIn=newObjectInputStream(inByte);
A classe Component no pacote java.awt é uma classe que implementa a interface Serializable. O componente é um objeto serializado . Portanto, o programa pode gravar o componente no fluxo de saída e, em seguida, usar o fluxo de entrada para ler um clone do. componente.