Java ObjectInputStream

Java Objectinputstream



„K informacím zapsaným prostřednictvím objektu ObjectOutputStream se primárně přistupuje pomocí třídy ObjectInputStream. Hlavním cílem třídy ObjectInputStream by bylo rekonstruovat základní data a entity, které jsou vytvářeny použitím třídy ObjectOutputStream. Využitím SocketStream lze ObjectInputStream použít také k přenosu objektů přes různé hostitele. Proto jsme se rozhodli napsat užitečnou příručku pro náš systém Ubuntu 20.04, abychom odhodili objekt třídy objectinputstream pro čtení dat ze vstupního toku souboru. Začněme otevřením konzole.'

Příklad 01

Počínaje prvním příkladem našeho článku jsme vytvořili nový soubor java „test.java“. Poté jsme také vygenerovali textový soubor ve stejné složce.







Abychom mohli číst objekty vstupního proudu v programu Java, musíme importovat výstupní proud. Na začátku jsme tedy importovali balíčky „java.io.ObjectInputStream“ a „java.io.ObjectOutputStream“. Spolu s tím, abychom mohli vložit data do souboru, musíme importovat „java.io.FileInputStream“ a „java.io.FileInputStream“. Vytvořili jsme třídu „Main“ obsahující jedinou funkci main().



Provádění funkce začíná deklarací celočíselné proměnné „d“. Abychom se vyhnuli náhlému ukončení programu kvůli chybám, přidali jsme příkaz try-catch java. Část „try“ začíná inicializací objektu výstupního proudu souboru „f“ prostřednictvím třídy FileOutputStream. Tomuto objektu „f“ jsme předali název souboru „new.txt“. Vytvořili jsme objektový výstupní proud „o“ a předali souborový objekt „f“ třídě ObjectOutputStream, aby se soubor stal výstupním proudem.



Hned na dalším řádku jsme zavolali funkci writeInt() výstupního proudu Java přes objekt výstupního proudu „o“, abychom mu předali celočíselnou proměnnou „d“, tj. abychom jej uložili do souboru. Na řádku 12 jsme vytvořili vstupní datový proud souboru „fs“ pomocí třídy FileInputStream jazyka Java tím, že jsme mu předali soubor „new.txt“, tj. již v něm jsou data. Tento objekt vstupního toku souboru „fs“ byl předán nově vygenerovanému objektu „os“ třídy ObjectInputStream, aby bylo možné číst ze souborového toku. Funkce println() z balíku „System.out“ java byla odvolána, aby zavolala funkci readInt() přes objekt vstupního proudu objektu „os“, aby zobrazila data ze souboru new.txt. Poté jsme uzavřeli výstupní proud a vstupní proud pomocí jejich příslušných objektů „o“ a „os“ pomocí funkce „zavřít“ manipulace se soubory v jazyce Java. Toto je nezbytný krok k uzavření proudů, aby žádný jiný uživatel nemohl vkládat nebo vydávat data ze souboru. V rámci příkazu catch() jsme pomocí funkce getStackTrace() získali chybu a zobrazili ji na obrazovce prostřednictvím proměnné výjimky „e“. Tento program je připraven ke spuštění na shellu.





Právě jsme uložili náš soubor s kódem java před jeho spuštěním a použili instrukci klíčového slova java ke spuštění souboru „test.java“. Na oplátku nic nevrací. Také zobrazení dat textového souboru „new.txt“ na shell pomocí instrukce „cat“ zobrazilo nesmyslnou hodnotu. Je to proto, že exekutor java většinou není schopen přečíst celočíselnou hodnotu ze souboru. S největší pravděpodobností však zobrazí přesnou celočíselnou hodnotu.



Při kontrole souboru new.txt jeho ručním otevřením jsme viděli, že v souboru byl zobrazen formát Unicode hodnoty.

Pokud nejste schopni zobrazit celočíselnou hodnotu ze souborového toku, můžete použít funkci writeObject() v java programu místo funkce writeInt() a zapsat hodnotu „d“ do souborového toku přes objekt „o“ jak je zobrazeno. Spolu s tím musíte místo funkce readInt() vypnout funkci „readObject()“, abyste zobrazili data ze vstupního toku souboru.

Aktualizace tohoto kódu by při spuštění zobrazila celočíselnou hodnotu.

Příklad 02

Mějme jinou hodnotu programování v jazyce Java, která vyřadí vstupní proud objektu pro hodnotu typu řetězce. Tento příklad kódu jsme tedy začali importem stejných tříd FileInputStream, FileOutputStream, ObjectInputStream a ObjectOutputStream jazyka java z balíčku „io“ knihovny java. Třída Main má svou funkci main() ke spuštění tohoto kódu. Řetězcová proměnná „d2“ je inicializována hodnotou dlouhého řetězce.

Stejný příkaz try-catch byl odvolán, aby se předešlo chybě a aby se tento java kód mohl hladce spustit. Objekt „f“ pro výstupní datový proud souboru byl vytvořen prostřednictvím třídy FileOutputStream s argumentem „new.txt“. Objekt výstupního proudu souboru „f“ byl předán objektu výstupního proudu „o“, který byl vytvořen použitím třídy ObjectOutputStream. Nyní výstupní proud „o“ volá funkci writeObject() předáním řetězcové proměnné „d“, která má být zapsána do souboru „new.txt“.

Poté vytvořil vstupní proud souboru „fs“ pomocí třídy FileInputStream tak, že mu předal název souboru „new.txt“, tj. aby z něj četl data. Nyní by objekt třídy ObjectInputStream „os“ používal objekt vstupního proudu souboru „fs“ ke čtení dat pomocí funkce readObject() java v příkazu provedení „println“ třídy „System.out“. Potom máme tendenci uzavírat vstupní a výstupní proudy voláním funkce „close“ a příkaz catch se používá k získání jakýchkoli výjimek, které se staly v části try, a zabránění náhlému ukončení provádění tohoto programu.

Spuštění tohoto souboru s kódem java a textového souboru zobrazilo hodnotu řetězce na konzole.

Závěr

Použití třídy ObjectInputStream je jedinou dostupnou metodou pro čtení látek, které používají protokol Serializable nebo Externalizable. Abychom to shrnuli, zahrnuli jsme všechny potřebné podrobnosti, abychom mohli využít třídu objectinputstream jazyka Java ke čtení dat ze vstupního toku objektu souboru. Za tímto účelem jsme zde odlévali dva různé příklady kódu Java. První příklad využívá hodnotu vstupní proměnné typu integer, zatímco druhá ilustrace odhodila hodnotu proměnné řetězce, tj. načtenou z proudu vstupního souboru.