Java ObjectInputStream

Java Objectinputstream



“Informações escritas por meio do objeto de um ObjectOutputStream são acessadas principalmente usando a classe ObjectInputStream. O objetivo principal da classe ObjectInputStream seria reconstruir os dados básicos e as entidades que são produzidas pelo emprego da classe ObjectOutputStream. Ao fazer uso de um SocketStream, ObjectInputStream também pode ser empregado para transferir objetos entre diferentes hosts. Portanto, decidimos escrever um guia útil para o nosso sistema Ubuntu 20.04 para eliminar o objeto de classe objectinputstream para ler dados do fluxo de entrada do arquivo. Vamos começar com a abertura de um console.”

Exemplo 01

Iniciando o primeiro exemplo do nosso artigo, criamos um novo arquivo java, “test.java”. Depois disso, também geramos um arquivo de texto na mesma pasta.







Para ler objetos do fluxo de entrada em um programa Java, precisamos importar o fluxo de saída. Portanto, importamos os pacotes “java.io.ObjectInputStream” e “java.io.ObjectOutputStream” no início. Junto com isso, para inserir os dados em um arquivo, precisamos importar o “java.io.FileInputStream” e o “java.io.FileInputStream”. Criamos uma classe “Main” contendo uma única função main().



A execução da função começa a partir da declaração de uma variável inteira “d”. Para evitar a saída repentina do programa devido a erros, adicionamos a instrução try-catch de java. A parte “try” começa com a inicialização de um objeto de fluxo de saída de arquivo “f” por meio da classe FileOutputStream. Passamos o nome do arquivo “new.txt” para este objeto “f”. Criamos um fluxo de saída de objeto “o” e passamos o objeto de arquivo “f” para a classe ObjectOutputStream para tornar um arquivo um fluxo de saída.



Na próxima linha, chamamos a função writeInt() do fluxo de saída Java por meio do objeto de fluxo de saída “o” para passar uma variável inteira “d”, ou seja, para salvá-lo em um arquivo. Na linha 12, criamos o fluxo de entrada do arquivo “fs” usando a classe FileInputStream do java passando um arquivo “new.txt”, ou seja, já possui dados nele. Este objeto de fluxo de entrada de arquivo “fs” foi passado para o objeto recém-gerado “os” da classe ObjectInputStream para permitir a leitura do fluxo de arquivo. A função println() do pacote “System.out” do java foi descartada para chamar a função readInt() através do objeto fluxo de entrada do objeto “os” para exibir os dados do arquivo new.txt. Depois disso, fechamos o fluxo de saída e o fluxo de entrada usando seus respectivos objetos “o” e “os” usando a função “close” de manipulação de arquivos em java. Esta é uma etapa necessária para fechar os fluxos para que nenhum outro usuário possa inserir ou enviar dados de um arquivo. Dentro da instrução catch(), usamos a função getStackTrace() para obter um erro e exibi-lo na tela por meio da variável Exception “e”. Este programa está pronto para execução no shell.





Acabamos de salvar nosso arquivo de código java antes de sua execução e usamos a instrução de palavra-chave java para executar o arquivo “test.java”. Não retorna nada em troca. Além disso, exibir os dados de um arquivo de texto “new.txt” no shell usando a instrução “cat” exibia um valor lixo. Isso ocorre porque, na maioria das vezes, o executor java não consegue ler o valor inteiro do arquivo. Mas muito provavelmente, ele exibirá o valor inteiro exato.



Ao verificar o arquivo new.txt abrindo-o manualmente, vimos que um formato Unicode do valor foi mostrado no arquivo.

Se você não conseguir exibir o valor inteiro do fluxo de arquivo, poderá usar a função writeObject() no programa java em vez da função writeInt() para gravar o valor “d” no fluxo de arquivo por meio do objeto “o” conforme exibido. Junto com isso, você precisa descartar a função “readObject()” em vez da função readInt() para exibir os dados do fluxo de entrada do arquivo.

A atualização desse código exibiria o valor inteiro na execução.

Exemplo 02

Vamos ter outro valor de programação java para descartar o fluxo de entrada do objeto para o valor do tipo string. Assim, iniciamos este código de exemplo com a importação das mesmas classes FileInputStream, FileOutputStream, ObjectInputStream e ObjectOutputStream de java do pacote “io” da biblioteca java. A classe Main tem sua função main() para iniciar a execução deste código. Uma variável de string “d2” é inicializada com um valor de string longo.

A mesma instrução try-catch foi descartada para evitar o erro e para uma execução suave deste código java. O objeto “f” para o fluxo de saída do arquivo foi criado através da classe FileOutputStream usando “new.txt” como argumento. O objeto de fluxo de saída de arquivo “f” foi passado para o objeto de fluxo de saída “o” que foi criado pelo uso da classe ObjectOutputStream. Agora, o fluxo de saída “o” está chamando a função writeObject() passando uma variável string “d” para ser escrita no arquivo “new.txt”.

Em seguida, crie um fluxo de entrada de arquivo “fs” usando a classe FileInputStream passando um nome de arquivo “new.txt”, ou seja, para ler os dados dele. Agora, o objeto de classe ObjectInputStream “os” estaria usando o objeto de fluxo de entrada de arquivo “fs” para ler os dados usando a função readObject() de java na instrução de execução “println” da classe “System.out”. Então, tendemos a fechar os fluxos de entrada e saída chamando a função “close”, e a instrução catch é utilizada para obter quaisquer exceções que tenham ocorrido na parte try e evitar o fechamento repentino da execução deste programa.

A execução deste arquivo de código java e o arquivo de texto exibiam o valor da string no console.

Conclusão

O uso da classe ObjectInputStream é o único método disponível para leitura de substâncias que utilizam o protocolo Serializable ou Externalizable. Para resumir, incluímos todos os detalhes necessários para utilizar a classe objectinputstream do java para ler dados do fluxo de entrada do objeto de arquivo. Para isso, estamos lançando dois exemplos de código java diferentes aqui. O primeiro exemplo utiliza o valor da variável de entrada do tipo inteiro, enquanto a segunda ilustração foi eliminando o valor da variável da string, ou seja, lido a partir do fluxo do arquivo de entrada.