Java ObjectInputStream

Java Objectinputstream



»Do informacij, zapisanih prek objekta ObjectOutputStream, se primarno dostopa z uporabo razreda ObjectInputStream. Glavni cilj razreda ObjectInputStream bi bil rekonstruirati osnovne podatke in entitete, ki so proizvedene z uporabo razreda ObjectOutputStream. Z uporabo SocketStream se lahko ObjectInputStream uporabi tudi za prenos objektov med različnimi gostitelji. Zato smo se odločili, da napišemo koristen vodnik za naš sistem Ubuntu 20.04, da opustimo objekt razreda objectinputstream za branje podatkov iz vhodnega toka datoteke. Začnimo z odpiranjem konzole.«

Primer 01

Na začetku prvega primera v našem članku smo ustvarjali novo datoteko java, »test.java«. Po tem smo v isti mapi ustvarili tudi besedilno datoteko.







Za branje objektov vhodnega toka v programu Java moramo uvoziti izhodni tok. Tako smo na začetku uvažali paketa “java.io.ObjectInputStream” in “java.io.ObjectOutputStream”. Poleg tega moramo za vstavljanje podatkov v datoteko uvoziti »java.io.FileInputStream« in »java.io.FileInputStream«. Ustvarili smo razred »Main«, ki vsebuje eno samo funkcijo main().



Izvajanje funkcije se začne z deklaracijo celoštevilske spremenljivke “d”. Da bi se izognili nenadnemu izhodu programa zaradi napak, smo dodali stavek try-catch jave. Del »poskusi« se začne z inicializacijo objekta izhodnega toka datoteke »f« prek razreda FileOutputStream. Temu objektu »f« smo posredovali ime datoteke »new.txt«. Ustvarili smo objektni izhodni tok »o« in datotečni objekt »f« posredovali razredu ObjectOutputStream, da naredimo datoteko izhodni tok.



Že v naslednji vrstici smo klicali funkcijo writeInt() izhodnega toka Jave prek predmeta izhodnega toka »o«, da mu posredujemo celoštevilsko spremenljivko »d«, tj. da ga shranimo v datoteko. V 12. vrstici smo ustvarili vhodni tok datoteke »fs« z uporabo razreda FileInputStream v Javi, tako da smo mu posredovali datoteko »new.txt«, kar pomeni, da so v njej že podatki. Ta objekt vhodnega toka datoteke »fs« je bil posredovan na novo ustvarjenemu objektu »os« razreda ObjectInputStream, da se omogoči branje iz toka datoteke. Funkcija println() iz paketa »System.out« v Javi je bila zavrnjena za klic funkcije readInt() prek predmeta vhodnega toka objekta »os« za prikaz podatkov iz datoteke new.txt. Po tem smo zapirali izhodni tok in vhodni tok z uporabo njunih predmetov »o« in »os« z uporabo funkcije »close« za obdelavo datotek v Javi. To je nujen korak za zapiranje tokov, tako da noben drug uporabnik ne more vnesti ali izpisati podatkov iz datoteke. Znotraj stavka catch() smo uporabljali funkcijo getStackTrace(), da dobimo napako in jo prikažemo na zaslonu prek spremenljivke izjeme »e«. Ta program je pripravljen za izvajanje v lupini.





Pravkar smo shranili našo kodno datoteko java pred njeno izvedbo in uporabili navodilo ključne besede java za izvedbo datoteke »test.java«. V zameno ne vrne ničesar. Poleg tega je prikaz podatkov besedilne datoteke »new.txt« na lupini z uporabo navodil »cat« prikazal vrednost smeti. To je zato, ker izvajalec java večino časa ne more prebrati vrednosti celega števila iz datoteke. Najverjetneje pa bo prikazal točno celoštevilčno vrednost.



Pri preverjanju datoteke new.txt z ročnim odpiranjem smo videli, da je bila v datoteki prikazana oblika Unicode vrednosti.

Če ne morete prikazati vrednosti celega števila iz datotečnega toka, lahko uporabite funkcijo writeObject() v programu java namesto funkcije writeInt(), da zapišete vrednost 'd' v datotečni tok prek objekta 'o' kot je prikazano. Poleg tega morate opustiti funkcijo »readObject()« namesto funkcije readInt(), da prikažete podatke iz vhodnega toka datoteke.

Posodabljanje te kode bi prikazalo vrednost celega števila ob izvedbi.

Primer 02

Imejmo še eno vrednost programiranja Java, da zavrnemo vhodni tok objekta za vrednost vrste niza. Tako smo ta primer kode začeli z uvozom istih razredov FileInputStream, FileOutputStream, ObjectInputStream in ObjectOutputStream java iz paketa »io« knjižnice java. Glavni razred ima svojo funkcijo main() za začetek izvajanja te kode. Nizovna spremenljivka 'd2' je inicializirana z dolgo vrednostjo niza.

Isti stavek try-catch je bil odstranjen, da bi se izognili napaki in za nemoteno izvajanje te kode java. Objekt »f« za izhodni tok datoteke je bil ustvarjen prek razreda FileOutputStream, ki kot argument privzame »new.txt«. Objekt izhodnega toka datoteke »f« je bil posredovan objektu izhodnega toka »o«, ki je bil ustvarjen z uporabo razreda ObjectOutputStream. Zdaj je izhodni tok »o« klical funkcijo writeObject(), tako da ji je posredoval spremenljivko niza »d«, ki naj se zapiše v datoteko »new.txt«.

Nato je ustvaril vhodni tok datoteke »fs« z uporabo razreda FileInputStream, tako da mu je posredoval ime datoteke »new.txt«, tj. za branje podatkov iz nje. Zdaj bi objekt razreda ObjectInputStream »os« uporabljal objekt vhodnega toka datoteke »fs« za branje podatkov z uporabo funkcije readObject() java v izvedbenem stavku »println« razreda »System.out«. Nato običajno zapremo vhodne in izhodne tokove s klicem funkcije »close«, stavek catch pa se uporabi za ugotavljanje morebitnih izjem, ki so se zgodile v poskusnem delu, in izogibanje nenadnemu zaprtju izvajanja tega programa.

Izvedba te datoteke s kodo java in besedilne datoteke je prikazala vrednost niza na konzoli.

Zaključek

Uporaba razreda ObjectInputStream je edina razpoložljiva metoda za branje snovi, ki uporabljajo protokol Serializable ali Externalizable. Če povzamemo, vključili smo vse potrebne podrobnosti za uporabo razreda objectinputstream Jave za branje podatkov iz vhodnega toka datotečnega objekta. Za to smo tukaj oddali dva različna primera kode java. Prvi primer uporablja vrednost vhodne spremenljivke celoštevilskega tipa, medtem ko je druga ilustracija opustila vrednost spremenljivke niza, tj. branje iz toka vhodne datoteke.