Java ObjectInputStream

Java Objectinputstream



'ObjectOutputStream-objektin kautta kirjoitettuun tietoon päästään ensisijaisesti ObjectInputStream-luokan avulla. ObjectInputStream-luokan päätavoitteena olisi rekonstruoida perustiedot ja entiteetit, jotka tuotetaan käyttämällä ObjectOutputStream-luokkaa. Käyttämällä SocketStreamia ObjectInputStreamia voidaan myös käyttää siirtämään objekteja eri isäntien välillä. Siksi olemme päättäneet kirjoittaa hyödyllisen oppaan Ubuntu 20.04 -järjestelmällemme objektiinputstream -luokan objektin poistamiseksi tietojen lukemiseksi tiedoston syöttövirrasta. Aloitetaan konsolin avaamisesta.'

Esimerkki 01

Alkaen artikkelimme ensimmäisen esimerkin, olemme luoneet uutta Java-tiedostoa, 'test.java'. Sen jälkeen loimme myös tekstitiedoston samaan kansioon.







Jotta voimme lukea syöttövirran objekteja Java-ohjelmassa, meidän on tuotava tulosvirta. Olemme siis tuoneet 'java.io.ObjectInputStream' ja 'java.io.ObjectOutputStream' paketteja alussa. Tämän lisäksi, jotta voimme lisätä tiedot tiedostoon, meidän on tuotava 'java.io.FileInputStream' ja 'java.io.FileInputStream'. Olemme luoneet luokan 'Main', jossa on yksi main()-funktio.



Toiminnon suoritus alkaa kokonaislukumuuttujan “d” ilmoituksesta. Välttääksemme ohjelman äkillisen poistumisen virheiden takia, lisäsimme javan try-catch-käskyn. 'Try'-osa alkaa tiedoston lähtövirtaobjektin 'f' alustuksella FileOutputStream-luokan kautta. Olemme välittäneet tiedostonimen 'new.txt' tälle objektille 'f'. Olemme luoneet Object Output Stream -virran 'o' ja siirtäneet tiedostoobjektin 'f' ObjectOutputStream-luokkaan tehdäksemme tiedostosta tulosvirran.



Heti seuraavalla rivillä olemme kutsuneet Java-lähtövirran writeInt()-funktiota lähtövirtaobjektin 'o' kautta välittääksemme sille kokonaislukumuuttujan 'd', eli tallentaaksemme sen tiedostoon. Rivillä 12 olemme luoneet tiedostojen syöttövirran 'fs' käyttämällä java-tiedoston FileInputStream-luokkaa välittämällä sille tiedoston 'new.txt', eli siinä on jo dataa. Tämä tiedoston syöttövirtaobjekti 'fs' on välitetty ObjectInputStream-luokan äskettäin luodulle objektille 'os', jotta tiedostovirrasta voidaan lukea. Javan 'System.out'-paketin println()-funktio on hylätty kutsumaan readInt()-funktiota objektin syöttövirran objektin 'os' kautta uuden.txt-tiedoston tietojen näyttämiseksi. Sen jälkeen olemme sulkeneet tulosvirran ja syöttövirran käyttämällä vastaavia objekteja 'o' ja 'os' käyttämällä Java-tiedostojen käsittelyn 'sulkea'-toimintoa. Tämä on välttämätön vaihe streamien sulkemiseksi, jotta kukaan muu käyttäjä ei voi syöttää tai tulostaa tietoja tiedostosta. Olemme catch()-käskyssä käyttäneet getStackTrace()-funktiota saadaksemme virheen ja näyttämään sen näytöllä Exception-muuttujan “e” kautta. Tämä ohjelma on valmis suoritettavaksi shellissä.





Olimme juuri tallentaneet java-kooditiedostomme ennen sen suorittamista ja käytimme java-avainsanaohjetta 'test.java'-tiedoston suorittamiseen. Se ei palauta mitään vastineeksi. Myös tekstitiedoston 'new.txt' tietojen näyttäminen kuoressa 'cat'-käskyn avulla näytti roskaarvon. Tämä johtuu siitä, että suurimman osan ajasta java-suorittaja ei pysty lukemaan kokonaislukuarvoa tiedostosta. Mutta todennäköisimmin se näyttää tarkan kokonaisluvun arvon.



Tarkastettaessamme new.txt-tiedostoa avaamalla se manuaalisesti, olemme nähneet, että tiedostossa on esitetty arvon Unicode-muoto.

Jos et pysty näyttämään kokonaislukuarvoa tiedostovirrasta, voit käyttää java-ohjelman writeObject()-funktiota writeInt()-funktion sijaan kirjoittaaksesi arvon 'd' tiedostovirtaan objektin 'o' kautta. kuten näytetään. Tämän lisäksi sinun on poistettava 'readObject()'-funktio readInt()-funktion sijaan, jotta voit näyttää tiedoston syöttövirran tiedot.

Tämän koodin päivittäminen näyttäisi kokonaisluvun suorituksen yhteydessä.

Esimerkki 02

Otetaan toinen java-ohjelmoinnin arvo, joka sulkee objektin syöttövirran merkkijonotyypin arvoa varten. Siksi olemme aloittaneet tämän esimerkkikoodin tuomalla samat java-luokat FileInputStream, FileOutputStream, ObjectInputStream ja ObjectOutputStream java-kirjaston 'io'-paketista. Main-luokassa on main()-funktio tämän koodin suorittamisen aloittamiseksi. Merkkijonomuuttuja 'd2' alustetaan pitkällä merkkijonoarvolla.

Sama try-catch-lause on hylätty virheiden välttämiseksi ja tämän Java-koodin sujuvan suorittamisen varmistamiseksi. Objekti “f” tiedoston tulostusvirralle on luotu FileOutputStream-luokan kautta käyttämällä argumenttina “new.txt”. Tiedoston lähtövirtaobjekti 'f' on välitetty tulosvirtaobjektille 'o', joka on luotu ObjectOutputStream-luokan avulla. Nyt lähtövirta 'o' on kutsunut writeObject()-funktiota välittämällä sille merkkijonomuuttujan 'd', joka kirjoitetaan tiedostoon 'new.txt'.

Sitten luotiin tiedostosyöttövirta 'fs' käyttämällä FileInputStream-luokkaa antamalla sille tiedostonimi 'new.txt' eli lukemaan siitä tiedot. Nyt ObjectInputStream-luokan objekti 'os' käyttäisi tiedoston syöttövirtaobjektia 'fs' tietojen lukemiseen käyttämällä javan readObject()-funktiota 'System.out'-luokan 'println'-suorituskäskyssä. Sitten meillä on tapana sulkea syöttö- ja lähtövirrat kutsumalla 'sulje'-funktiota, ja catch-lausetta hyödynnetään saadakseen mahdolliset poikkeukset try-osassa ja välttämään tämän ohjelman suorittamisen äkillinen sulkeminen.

Tämän Java-kooditiedoston ja tekstitiedoston suorittaminen näytti merkkijonon arvon konsolissa.

Johtopäätös

ObjectInputStream-luokan käyttö on ainoa käytettävissä oleva menetelmä Serializable- tai Externalizable-protokollaa käyttävien aineiden lukemiseen. Yhteenvetona totean, että olemme sisällyttäneet kaikki tarvittavat yksityiskohdat, jotta voimme käyttää Java-objektinsyöttöluokkaa tietojen lukemiseen tiedostoobjektin syöttövirrasta. Tätä varten olemme heittäneet tänne kaksi erilaista Java-koodiesimerkkiä. Ensimmäisessä esimerkissä hyödynnetään kokonaislukutyyppistä syöttömuuttujan arvoa, kun taas toisessa havainnollistuksessa on käytetty merkkijonomuuttujan arvoa, eli luettua syöttötiedostovirrasta.