Java ObjectInputStream

Java Objectinputstream



'Information skriven via objektet i en ObjectOutputStream nås primärt med hjälp av klassen ObjectInputStream. Huvudsyftet med klassen ObjectInputStream skulle vara att rekonstruera de grundläggande data och enheter som produceras genom att använda klassen ObjectOutputStream. Genom att använda en SocketStream kan ObjectInputStream också användas för att överföra objekt över olika värdar. Därför har vi bestämt oss för att skriva en användbar guide för vårt Ubuntu 20.04-system för att kasta bort klassobjektet objectinputstream för att läsa data från filinmatningsströmmen. Låt oss börja med att öppna en konsol.'

Exempel 01

Med början i vår artikels första exempel har vi skapat en ny java-fil, 'test.java'. Efter det genererade vi även en textfil i samma mapp.







För att läsa objekt från ingångsströmmen i ett java-program måste vi importera utströmmen. Så vi har importerat paketen 'java.io.ObjectInputStream' och 'java.io.ObjectOutputStream' i början. Tillsammans med det, för att infoga data i en fil, måste vi importera 'java.io.FileInputStream' och 'java.io.FileInputStream'. Vi har skapat en klass 'Main' som innehåller en enda main()-funktion.



Funktionsexekveringen startar från deklarationen av en heltalsvariabel 'd'. För att undvika att programmet plötsligt avslutas på grund av fel, lade vi till try-catch-satsen för java. 'Try'-delen börjar med initieringen av ett filutgångsströmobjekt 'f' via klassen FileOutputStream. Vi har skickat filnamnet 'new.txt' till detta objekt 'f'. Vi har skapat en Object Output Stream 'o' och skickat filobjektet 'f' till ObjectOutputStream-klassen för att göra en fil till en output-ström.



På nästa rad har vi anropat funktionen writeInt() för Java-utgångsströmmen via utgångsströmobjektet 'o' för att skicka en heltalsvariabel 'd', dvs. spara den i en fil. På rad 12 har vi skapat filinmatningsström 'fs' med hjälp av FileInputStream-klassen av java genom att skicka en fil 'new.txt', dvs. redan har data i den. Detta filindataströmobjekt 'fs' har skickats till det nygenererade objektet 'os' i klassen ObjectInputStream för att möjliggöra läsning från filströmmen. Println()-funktionen från 'System.out'-paketet i java har avvisats för att anropa readInt()-funktionen via objektinmatningsströmobjektet 'os' för att visa data från new.txt-filen. Efter det har vi stängt utgångsströmmen och ingångsströmmen med deras respektive objekt 'o' och 'os' med hjälp av 'stäng'-funktionen för filhantering i java. Detta är ett nödvändigt steg för att stänga strömmarna så att ingen annan användare kan mata in eller mata ut data från en fil. Inom catch()-satsen har vi använt getStackTrace()-funktionen för att få ett fel och visa det på skärmen via undantagsvariabeln 'e'. Detta program är redo att köras på skalet.





Vi hade precis sparat vår Java-kodfil innan den kördes och använde Java-nyckelordsinstruktionen för att köra filen 'test.java'. Det ger ingenting tillbaka. Att visa data från en textfil 'new.txt' på skalet med 'cat'-instruktionen visade också ett skräpvärde. Detta beror på att java-exekutorn för det mesta inte kan läsa heltalsvärdet från filen. Men troligen kommer det att visa det exakta heltalsvärdet.



När vi kontrollerade new.txt-filen genom att manuellt öppna den, har vi sett att ett Unicode-format av värdet har visats i filen.

Om du inte kan visa heltalsvärdet från filströmmen kan du använda funktionen writeObject() i javaprogrammet istället för funktionen writeInt() för att skriva värdet 'd' till filströmmen via objektet 'o' som visas. Tillsammans med det måste du ta bort funktionen 'readObject()' istället för funktionen readInt() för att visa data från filinmatningsströmmen.

Uppdatering av den här koden skulle visa heltalsvärdet vid körning.

Exempel 02

Låt oss ha ett annat värde för Java-programmering för att kasta bort objektinmatningsströmmen för strängtypsvärdet. Därför har vi startat den här exempelkoden med importen av samma klasser FileInputStream, FileOutputStream, ObjectInputStream och ObjectOutputStream av java från 'io'-paketet i java-biblioteket. Main-klassen har sin main()-funktion för att börja exekvera denna kod. En strängvariabel 'd2' initieras med ett långt strängvärde.

Samma try-catch-sats har förkastats för att undvika felet och för smidig exekvering av denna java-kod. Objektet 'f' för filutdataströmmen har skapats via klassen FileOutputStream med 'new.txt' som ett argument. Filutdataströmsobjektet 'f' har skickats till outputströmobjektet 'o' som har skapats med hjälp av klassen ObjectOutputStream. Nu har utgångsströmmen 'o' anropat funktionen writeObject() genom att skicka en strängvariabel 'd' till den som ska skrivas i filen 'new.txt'.

Skapa sedan en filinmatningsström 'fs' med hjälp av FileInputStream-klassen genom att ge den ett filnamn 'new.txt', dvs. för att läsa data från den. Nu skulle ObjectInputStream-klassobjektet 'os' använda filinmatningsströmobjektet 'fs' för att läsa data med funktionen readObject() i java i exekveringssatsen 'println' för klassen 'System.out'. Sedan tenderar vi att stänga ingångs- och utgångsströmmarna genom att anropa 'close'-funktionen, och catch-satsen används för att få några undantag som har hänt i försöksdelen och undvika en plötslig stängning av programmets körning.

Exekveringen av denna java-kodfil och textfilen visade strängvärdet på konsolen.

Slutsats

Användningen av klassen ObjectInputStream är den enda tillgängliga metoden för att läsa ämnen som använder protokollet Serializable eller Externalizable. Sammanfattningsvis har vi inkluderat alla nödvändiga detaljer för att använda Javas objectinputstream-klass för att läsa data från filobjektets indataström. För detta har vi gjutit två olika Java-kodexempel här. Det första exemplet använder indatavariabelvärdet för heltalstyp, medan den andra illustrationen har tagit bort strängvariabelvärdet, dvs. läst från indatafilströmmen.