Java ObjectInputStream (com exemplos)

Neste tutorial, aprenderemos sobre ObjectOutputStream Java e seus métodos com a ajuda de exemplos.

A ObjectInputStreamclasse do java.iopacote pode ser usada para ler objetos que foram escritos anteriormente por ObjectOutputStream.

Ele estende a InputStreamclasse abstrata.

Antes de aprender sobre a ObjectInputStreamclasse, certifique-se de saber sobre a classe ObjectOutputStream.

Trabalho de ObjectInputStream

O ObjectInputStreamé usado principalmente para ler dados gravados pelo ObjectOutputStream.

Basicamente, o ObjectOutputStreamconverte objetos Java em fluxos correspondentes. Isso é conhecido como serialização. Esses fluxos convertidos podem ser armazenados em arquivos ou transferidos por meio de redes.

Agora, se precisarmos ler esses objetos, usaremos o ObjectInputStreamque converterá os fluxos de volta aos objetos correspondentes. Isso é conhecido como desserialização.

Crie um ObjectInputStream

Para criar um fluxo de entrada de objeto, devemos importar o java.io.ObjectInputStreampacote primeiro. Depois de importar o pacote, aqui está como podemos criar um fluxo de entrada.

 // Creates a file input stream linked with the specified file FileInputStream fileStream = new FileInputStream(String file); // Creates an object input stream using the file input stream ObjectInputStream objStream = new ObjectInputStream(fileStream); 

No exemplo acima, criamos um fluxo de entrada de objeto denominado objStream que está vinculado ao fluxo de entrada de arquivo denominado fileStream.

Agora, o objStreampode ser usado para ler objetos do arquivo.

Métodos de ObjectInputStream

A ObjectInputStreamclasse fornece implementações de diferentes métodos presentes na InputStreamclasse.

Método read ()

  • read() - lê um byte de dados do fluxo de entrada
  • readBoolean() - lê dados em formato booleano
  • readChar() - lê os dados em forma de caractere
  • readInt() - lê dados em formato inteiro
  • readObject() - lê o objeto do fluxo de entrada

Exemplo 1: Java ObjectInputStream

Vamos ver como podemos usar a ObjectInputStreamclasse para ler objetos escritos pela ObjectOutputStreamclasse.

 import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; class Main ( public static void main(String() args) ( int data1 = 5; String data2 = "This is programiz"; try ( FileOutputStream file = new FileOutputStream("file.txt"); ObjectOutputStream output = new ObjectOutputStream(file); // Writing to the file using ObjectOutputStream output.writeInt(data1); output.writeObject(data2); FileInputStream fileStream = new FileInputStream("file.txt"); // Creating an object input stream ObjectInputStream objStream = new ObjectInputStream(fileStream); //Using the readInt() method System.out.println("Integer data :" + objStream.readInt()); // Using the readObject() method System.out.println("String data: " + objStream.readObject()); output.close(); objStream.close(); ) catch (Exception e) ( e.getStackTrace(); ) ) ) 

Resultado

 Dados inteiros: 5 dados String: Isto é programiz 

No exemplo acima, usamos o método readInt()e readObject()para ler dados inteiros e dados de objeto do arquivo.

Aqui, usamos o ObjectOutputStreampara gravar dados no arquivo. Em seguida, lemos os dados do arquivo usando o ObjectInputStream.

Exemplo 2: Java ObjectInputStream

Vamos ver outro exemplo prático,

 import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.Serializable; class Dog implements Serializable ( String name; String breed; public Dog(String name, String breed) ( this.name = name; this.breed = breed; ) ) class Main ( public static void main(String() args) ( // Creates an object of Dog class Dog dog = new Dog("Tyson", "Labrador"); try ( FileOutputStream file = new FileOutputStream("file.txt"); // Creates an ObjectOutputStream ObjectOutputStream output = new ObjectOutputStream(file); // Writes objects to the output stream output.writeObject(dog); FileInputStream fileStream = new FileInputStream("file.txt"); // Creates an ObjectInputStream ObjectInputStream input = new ObjectInputStream(fileStream); // Reads the objects Dog newDog = (Dog) input.readObject(); System.out.println("Dog Name: " + newDog.name); System.out.println("Dog Breed: " + newDog.breed); output.close(); input.close(); ) catch (Exception e) ( e.getStackTrace(); ) ) ) 

Resultado

 Nome do Cachorro: Tyson Raça de Cachorro: Labrador 

No exemplo acima, criamos

  • ObjectOutputStreamsaída nomeada usando o FileOutputStreamarquivo nomeado
  • ObjectInputStreamentrada nomeada usando o FileInputStreamfileStream nomeado
  • Um cão objeto da classe Dog

Aqui, usamos o fluxo de saída do objeto para gravar o objeto no arquivo. E, o fluxo de entrada do objeto para ler o objeto do arquivo.

Nota : A classe Dog implementa a Serializableinterface. É porque o ObjectOutputStreamúnico grava os objetos serializáveis ​​no fluxo de saída.

Outros métodos de ObjectInputStream

Métodos Descrições
available() retorna o número disponível de bytes no fluxo de entrada
mark() marca a posição no fluxo de entrada até a qual os dados foram lidos
reset() retorna o controle para o ponto no fluxo de entrada onde a marca foi definida
skipBytes() pula e descarta os bytes especificados do fluxo de entrada
close() fecha o fluxo de entrada do objeto

Para saber mais, visite Java ObjectInputStream (documentação oficial do Java).

Artigos interessantes...