As classes ObjectInputStream e ObjectOutputStream são subclasses das classes InputStream e OutputStream respectivamente. Os objetos criados pelas classes ObjectInputStream e ObjectOutputStream são chamados de fluxos de entrada de objetos e fluxos de saída de objetos . O fluxo de saída do objeto usa o método writeObject(Object obj) para gravar um objeto obj em um arquivo, e o fluxo de entrada do objeto usa readObject() para ler um objeto no programa.
Os métodos de construção das classes ObjectInputStream e ObjectOutputStream são os seguintes:
O ponteiro de ObjectOutputStream deve ser um objeto de fluxo de saída, portanto, ao preparar-se para gravar um objeto em um arquivo, primeiro crie um fluxo de saída usando uma subclasse de OutputStream.
Por exemplo, use FileOutputStream para criar um fluxo de saída de arquivo, o código é o seguinte:
FileOutputStreamfileOut=newFileOutputStream(tom.txt);ObjectOutputStreamobjectout=newObjectOutputStream(fileOut);
Da mesma forma, o ponteiro de ObjectInputStream deve ser um objeto de fluxo de entrada, portanto, ao preparar-se para ler um objeto de um arquivo no programa, primeiro crie um fluxo de entrada usando uma subclasse de InputStream.
Por exemplo, use FileInputStream para criar um fluxo de entrada de arquivo, o código é o seguinte:
FileInputStreamfileIn=newFileInputStream(tom.txt);ObjectInputStreamobjectIn=newObjectInputStream(fileIn);
Ao usar fluxos de objetos para gravar ou ler objetos, certifique-se de que os objetos sejam serializados. Isso garante que os objetos possam ser gravados no arquivo e lidos corretamente no programa.
Se uma classe implementa a interface Serializable (a interface do pacote java.io), então o objeto criado por esta classe é o chamado objeto serializado. A maioria dos objetos fornecidos pelas bibliotecas de classes Java são chamados de serializados. Deve-se enfatizar que não existem métodos na interface Serializable, portanto as classes que implementam esta interface não precisam implementar métodos adicionais. Outra coisa a observar é que ao usar fluxos de objetos para gravar um objeto em um arquivo, não apenas o objeto deve ser serializado, mas os objetos membros do objeto também devem ser serializados.
Os métodos na interface Serializable são invisíveis para o programa, portanto, as classes que implementam essa interface não precisam implementar métodos adicionais. Quando um objeto serializado é gravado no fluxo de saída do objeto, a JVM implementará os métodos na interface Serializable. texto em um determinado formato (informações de serialização do objeto) para o destino. Quando o fluxo de objetos ObjectInputStream lê um objeto de um arquivo, as informações de serialização do objeto são lidas novamente do arquivo e um objeto é criado com base nas informações de serialização do objeto.
Por exemplo, use fluxos de objetos para ler e gravar objetos criados pela classe TV:
TV.java
importjava.io.*;publicclassTVimplementsSerializable{Stringname;intprice;publicvoidsetName(Strings){name=s;}publicvoidsetPrice(intn){price=n;}publicStringgetName(){returnname;}publicintgetPrice(){returnprice;}}
Principal.java
importjava.io.*;publicclassMain{publicstaticvoidmain(Stringargs[]){TVchanghong=newTV();changhong.setName(Changhong TV);changhong.setPrice(5678);Filefile=newFile(television.txt);try{FileOutputStreamfileOut=newFileOutputStream (arquivo);ObjectOutputStreamobjectOut = newObjectOutputStream (fileOut);objectOut.writeObject (changhong);objectOut.close();FileInputStreamfileIn = newFileInputStream (arquivo);ObjectInputStreamobjectIn = newObjectInputStream (fileIn); .close();xinfei.setName(Xinfei TV);xinfei.setPrice(6666);System.out.println(nome do changhong:+changhong.getName());System.out.println(preço do changhong:+ changhong.getPrice ());System.out.println(nome do xinfei:+xinfei.getName());System.out.println(preço do xinfei:+xinfei.getPrice());}catch(ClassNotFoundExceptionevent){System .out.println( não é possível ler o objeto);}catch(IOExceptionevent){System.out.println(event);}}}