Java ObjectInputStream

Java Objectinputstream



„K informáciám zapísaným prostredníctvom objektu ObjectOutputStream sa pristupuje primárne pomocou triedy ObjectInputStream. Hlavným cieľom triedy ObjectInputStream by bola rekonštrukcia základných údajov a entít, ktoré sa vytvárajú použitím triedy ObjectOutputStream. Použitím SocketStream možno ObjectInputStream použiť aj na prenos objektov cez rôznych hostiteľov. Preto sme sa rozhodli napísať užitočnú príručku pre náš systém Ubuntu 20.04, aby sme odhodili objekt triedy objectinputstream na čítanie údajov zo vstupného toku súboru. Začnime otvorením konzoly.'

Príklad 01

Počnúc prvým príkladom nášho článku sme vytvorili nový súbor java „test.java“. Potom sme v rovnakom priečinku vygenerovali aj textový súbor.







Aby sme mohli čítať objekty vstupného toku v programe Java, musíme importovať výstupný tok. Na začiatku sme teda importovali balíčky „java.io.ObjectInputStream“ a „java.io.ObjectOutputStream“. Spolu s tým, aby sme vložili údaje do súboru, musíme importovať „java.io.FileInputStream“ a „java.io.FileInputStream“. Vytvorili sme triedu „Main“ obsahujúcu jedinú funkciu main().



Vykonanie funkcie začína deklaráciou celočíselnej premennej „d“. Aby sme sa vyhli náhlemu ukončeniu programu kvôli chybám, pridali sme príkaz try-catch java. Časť „try“ začína inicializáciou objektu výstupného prúdu súboru „f“ prostredníctvom triedy FileOutputStream. Tomuto objektu „f“ sme odovzdali názov súboru „new.txt“. Vytvorili sme objektový výstupný prúd „o“ a odovzdali súborový objekt „f“ triede ObjectOutputStream, aby sa súbor stal výstupným prúdom.



Hneď na ďalšom riadku sme zavolali funkciu writeInt() výstupného toku Java cez objekt výstupného toku „o“, aby sme mu odovzdali celočíselnú premennú „d“, t. j. aby sme ho uložili do súboru. Na riadku 12 sme vytvorili vstupný tok súboru „fs“ pomocou triedy FileInputStream jazyka java tak, že sme mu odovzdali súbor „new.txt“, t. j. už v ňom boli údaje. Tento objekt vstupného toku súboru „fs“ bol odovzdaný novovygenerovanému objektu „os“ triedy ObjectInputStream, aby sa umožnilo čítanie zo súborového toku. Funkcia println() z balíka „System.out“ java bola odstránená na volanie funkcie readInt() cez objekt vstupného toku objektu „os“ na zobrazenie údajov zo súboru new.txt. Potom sme uzatvorili výstupný tok a vstupný tok pomocou ich príslušných objektov „o“ a „os“ pomocou funkcie „zatvoriť“ manipulácie so súbormi v jazyku Java. Toto je nevyhnutný krok na zatvorenie tokov, aby žiadny iný používateľ nemohol vkladať ani odosielať údaje zo súboru. V rámci príkazu catch() sme pomocou funkcie getStackTrace() dostali chybu a zobrazili ju na obrazovke prostredníctvom premennej výnimky „e“. Tento program je pripravený na spustenie na shell.





Práve sme uložili náš súbor s kódom java pred jeho spustením a použili sme inštrukciu kľúčového slova java na spustenie súboru „test.java“. Nevracia na oplátku nič. Tiež zobrazenie údajov textového súboru „new.txt“ na shell pomocou inštrukcie „cat“ zobrazilo odpadovú hodnotu. Je to preto, že spúšťač java väčšinou nedokáže prečítať celočíselné hodnoty zo súboru. Ale s najväčšou pravdepodobnosťou zobrazí presnú celočíselnú hodnotu.



Pri kontrole súboru new.txt jeho ručným otvorením sme videli, že v súbore je zobrazený formát Unicode hodnoty.

Ak nemôžete zobraziť celočíselnú hodnotu zo súborového toku, môžete použiť funkciu writeObject() v programe java namiesto funkcie writeInt() na zapísanie hodnoty „d“ do toku súborov cez objekt „o“ ako je zobrazené. Spolu s tým musíte vypnúť funkciu „readObject ()“ namiesto funkcie readInt (), aby ste zobrazili údaje zo vstupného toku súboru.

Aktualizáciou tohto kódu by sa pri spustení zobrazila celočíselná hodnota.

Príklad 02

Ukážme si inú hodnotu programovania v jazyku Java na vypnutie vstupného toku objektu pre hodnotu typu reťazca. Tento príklad kódu sme teda začali importovaním rovnakých tried FileInputStream, FileOutputStream, ObjectInputStream a ObjectOutputStream java z balíka „io“ knižnice java. Trieda Main má svoju funkciu main() na spustenie tohto kódu. Reťazcová premenná „d2“ sa inicializuje hodnotou dlhého reťazca.

Rovnaký príkaz try-catch bol zrušený, aby sa predišlo chybe a aby sa zabezpečilo hladké vykonávanie tohto kódu java. Objekt „f“ pre výstupný tok súboru bol vytvorený prostredníctvom triedy FileOutputStream, pričom ako argument sa používa „new.txt“. Objekt výstupného toku súboru „f“ bol odovzdaný objektu výstupného toku „o“, ktorý bol vytvorený použitím triedy ObjectOutputStream. Teraz výstupný prúd „o“ volá funkciu writeObject() tým, že mu odovzdá reťazcovú premennú „d“, ktorá sa má zapísať do súboru „new.txt“.

Potom vytvorte vstupný prúd súboru „fs“ pomocou triedy FileInputStream tak, že mu odošlete názov súboru „new.txt“, t. j. na čítanie údajov z neho. Teraz by objekt triedy ObjectInputStream „os“ používal objekt vstupného toku súboru „fs“ na čítanie údajov pomocou funkcie readObject() java vo vykonávacom príkaze „println“ triedy „System.out“. Potom máme tendenciu zatvárať vstupné a výstupné toky volaním funkcie „close“ a príkaz catch sa používa na získanie akýchkoľvek výnimiek, ktoré sa vyskytli v časti try, a na zabránenie náhlemu ukončeniu vykonávania tohto programu.

Spustenie tohto súboru s kódom java a textového súboru zobrazilo hodnotu reťazca na konzole.

Záver

Použitie triedy ObjectInputStream je jedinou dostupnou metódou na čítanie látok, ktoré používajú protokol Serializable alebo Externalizable. Aby som to zhrnul, zahrnuli sme všetky potrebné podrobnosti na využitie triedy objectinputstream jazyka Java na čítanie údajov zo vstupného toku objektu súboru. Na tento účel sme sem odovzdali dva rôzne príklady kódu Java. Prvý príklad využíva hodnotu vstupnej premennej typu celé číslo, zatiaľ čo druhá ilustrácia odhodila hodnotu premennej reťazca, t. j. načítanú zo vstupného súboru.