Java ObjectInputStream

Java Objectinputstream



“Informatie die is geschreven via het object van een ObjectOutputStream wordt voornamelijk benaderd met behulp van de ObjectInputStream-klasse. Het belangrijkste doel van de ObjectInputStream-klasse zou zijn om de basisgegevens en entiteiten te reconstrueren die worden geproduceerd door de ObjectOutputStream-klasse te gebruiken. Door gebruik te maken van een SocketStream, kan ObjectInputStream ook worden gebruikt om objecten over verschillende hosts over te dragen. Daarom hebben we besloten een handige gids te schrijven voor ons Ubuntu 20.04-systeem om het objectinputstream-klasseobject af te schaffen om gegevens uit de bestandsinvoerstroom te lezen. Laten we beginnen met het openen van een console.”

Voorbeeld 01

Vanaf het eerste voorbeeld van ons artikel hebben we een nieuw java-bestand gemaakt, 'test.java'. Daarna hebben we in dezelfde map ook een tekstbestand gegenereerd.







Om objecten van de invoerstroom in een java-programma te lezen, moeten we de uitvoerstroom importeren. Daarom hebben we in het begin de pakketten 'java.io.ObjectInputStream' en 'java.io.ObjectOutputStream' geïmporteerd. Daarnaast moeten we, om de gegevens in een bestand in te voegen, de 'java.io.FileInputStream' en 'java.io.FileInputStream' importeren. We hebben een klasse 'Main' gemaakt met een enkele main() -functie.



De uitvoering van de functie begint bij de declaratie van een integer-variabele 'd'. Om te voorkomen dat het programma plotseling wordt afgesloten vanwege fouten, hebben we de try-catch-instructie van java toegevoegd. Het 'try' -gedeelte begint met de initialisatie van een bestandsuitvoerstroomobject 'f' via de FileOutputStream-klasse. We hebben de bestandsnaam “new.txt” doorgegeven aan dit object “f”. We hebben een Object Output Stream 'o' gemaakt en het bestandsobject 'f' doorgegeven aan de ObjectOutputStream-klasse om van een bestand een uitvoerstroom te maken.



Op de volgende regel hebben we de functie writeInt() van de Java-uitvoerstroom via het uitvoerstroomobject 'o' aangeroepen om het een integer-variabele 'd' door te geven, d.w.z. om het in een bestand op te slaan. Op regel 12 hebben we een bestandsinvoerstroom 'fs' gemaakt met behulp van de FileInputStream-klasse van java door het een bestand 'new.txt' door te geven, d.w.z. er staan ​​al gegevens in. Dit bestandsinvoerstroomobject 'fs' is doorgegeven aan het nieuw gegenereerde object 'os' van de ObjectInputStream-klasse om lezen uit de bestandsstroom mogelijk te maken. De functie println() uit het pakket 'System.out' van java is afgeschaft om de functie readInt() via het objectinvoerstroomobject 'os' aan te roepen om de gegevens uit het bestand new.txt weer te geven. Daarna hebben we de uitvoerstroom en invoerstroom gesloten met behulp van hun respectievelijke objecten 'o' en 'os' met behulp van de 'close' -functie van bestandsverwerking in Java. Dit is een noodzakelijke stap om de streams te sluiten, zodat geen enkele andere gebruiker gegevens uit een bestand kan invoeren of uitvoeren. Binnen de catch()-instructie hebben we de functie getStackTrace() gebruikt om een ​​fout te krijgen en deze op het scherm weer te geven via de Exception-variabele 'e'. Dit programma is klaar voor uitvoering op de shell.





We hadden net ons Java-codebestand opgeslagen voordat het werd uitgevoerd en gebruikten de java-sleutelwoordinstructie om het 'test.java' -bestand uit te voeren. Het geeft er niets voor terug. Ook het weergeven van de gegevens van een tekstbestand 'new.txt' op de shell met behulp van de 'cat' -instructie vertoonde een afvalwaarde. Dit komt omdat de Java-uitvoerder meestal de integerwaarde uit het bestand niet kan lezen. Maar hoogstwaarschijnlijk zal het de exacte integerwaarde weergeven.



Bij het controleren van het new.txt-bestand door het handmatig te openen, hebben we gezien dat een Unicode-indeling van de waarde in het bestand is weergegeven.

Als u de integerwaarde uit de bestandsstroom niet kunt weergeven, kunt u de functie writeObject() in het java-programma gebruiken in plaats van de functie writeInt() om de waarde 'd' naar de bestandsstroom te schrijven via het object 'o' zoals weergegeven. Daarnaast moet u de functie 'readObject()' afstoten in plaats van de functie readInt() om de gegevens uit de bestandsinvoerstroom weer te geven.

Als u deze code bijwerkt, wordt de integerwaarde bij uitvoering weergegeven.

Voorbeeld 02

Laten we een andere waarde van Java-programmering gebruiken om de objectinvoerstroom af te werpen voor de waarde van het tekenreekstype. We zijn deze voorbeeldcode dus begonnen met het importeren van dezelfde FileInputStream-, FileOutputStream-, ObjectInputStream- en ObjectOutputStream-klassen van java uit het 'io' -pakket van de java-bibliotheek. De klasse Main heeft zijn functie main() om te beginnen met het uitvoeren van deze code. Een stringvariabele “d2” wordt geïnitialiseerd met een lange stringwaarde.

Dezelfde try-catch-instructie is afgeschaft om de fout te voorkomen en voor een soepele uitvoering van deze Java-code. Het object 'f' voor de bestandsuitvoerstroom is gemaakt via de FileOutputStream-klasse met 'new.txt' als argument. Het bestandsuitvoerstroomobject 'f' is doorgegeven aan het uitvoerstroomobject 'o' dat is gemaakt met behulp van de ObjectOutputStream-klasse. Nu heeft de uitvoerstroom 'o' de functie writeObject() aangeroepen door er een tekenreeksvariabele 'd' aan door te geven die in het bestand 'new.txt' moet worden geschreven.

Maak vervolgens een bestandsinvoerstroom 'fs' met behulp van de FileInputStream-klasse door deze een bestandsnaam 'new.txt' door te geven, d.w.z. om de gegevens ervan te lezen. Nu zou het ObjectInputStream-klasseobject 'os' het bestandsinvoerstroomobject 'fs' gebruiken om de gegevens te lezen met behulp van de readObject() -functie van java in de 'println' -uitvoeringsinstructie van de 'System.out' -klasse. Vervolgens hebben we de neiging om de invoer- en uitvoerstromen te sluiten door de functie 'close' aan te roepen, en de catch-instructie wordt gebruikt om eventuele uitzonderingen in het try-gedeelte te voorkomen en het plotseling sluiten van deze programma-uitvoering te voorkomen.

De uitvoering van dit java-codebestand en het tekstbestand gaven de tekenreekswaarde op de console weer.

Conclusie

Het gebruik van de klasse ObjectInputStream is de enige beschikbare methode voor het lezen van stoffen die gebruikmaken van het Serializable- of Externalizable-protocol. Samenvattend hebben we alle benodigde details opgenomen om Java's objectinputstream-klasse te gebruiken om gegevens uit de invoerstroom van het bestandsobject te lezen. Hiervoor hebben we hier twee verschillende Java-codevoorbeelden gegoten. Het eerste voorbeeld gebruikt de waarde van de invoervariabele van het type integer, terwijl de tweede illustratie de waarde van de tekenreeksvariabele heeft weggelaten, d.w.z. gelezen uit de invoerbestandsstroom.