Java ObjectInputStream

Java Objectinputstream



„Az ObjectOutputStream objektumán keresztül írt információk elsősorban az ObjectInputStream osztály használatával érhetők el. Az ObjectInputStream osztály fő célja az ObjectOutputStream osztály használatával előállított alapadatok és entitások rekonstrukciója lenne. A SocketStream használatával az ObjectInputStream is használható objektumok átvitelére különböző gazdagépek között. Ezért úgy döntöttünk, hogy írunk egy hasznos útmutatót az Ubuntu 20.04 rendszerünkhöz, amellyel az objectinputstream osztály objektumot leválaszthatjuk a fájl bemeneti adatfolyamából. Kezdjük egy konzol megnyitásával.”

01. példa

Cikkünk első példájából kiindulva létrehoztunk egy új java fájlt, a „test.java”. Ezt követően egy szöveges fájlt is generáltunk ugyanabban a mappában.







A bemeneti adatfolyam objektumainak egy Java programban való olvasásához importálni kell a kimeneti adatfolyamot. Tehát az elején importáltuk a „java.io.ObjectInputStream” és „java.io.ObjectOutputStream” csomagokat. Ezzel együtt az adatok fájlba történő beillesztéséhez importálnunk kell a „java.io.FileInputStream” és „java.io.FileInputStream” fájlokat. Létrehoztunk egy „Main” osztályt, amely egyetlen main() függvényt tartalmaz.



A függvény végrehajtása egy „d” egész változó deklarációjával kezdődik. A programból a hibák miatti hirtelen kilépés elkerülése érdekében hozzáadtuk a java try-catch utasítását. A „try” rész egy „f” fájlkimeneti adatfolyam objektum inicializálásával kezdődik a FileOutputStream osztályon keresztül. A „new.txt” fájlnevet átadtuk ennek az „f” objektumnak. Létrehoztunk egy „o” objektumkimeneti adatfolyamot, és átadtuk az „f” fájlobjektumot az ObjectOutputStream osztálynak, hogy egy fájlt kimeneti adatfolyammá tegyünk.



A következő sorban a Java kimeneti adatfolyam writeInt() függvényét hívtuk meg az „o” kimeneti adatfolyam objektumon keresztül, hogy egy „d” egész változót adjunk át neki, azaz elmentsük egy fájlba. A 12. sorban létrehoztuk az „fs” fájlbemeneti adatfolyamot a java FileInputStream osztályának felhasználásával úgy, hogy átadunk neki egy „new.txt” fájlt, azaz már tartalmaznak adatokat. Ez az „fs” fájl bemeneti adatfolyam objektum át lett adva az ObjectInputStream osztály újonnan generált „os” objektumának, hogy lehetővé tegye az olvasást a fájlfolyamból. A java „System.out” csomagjából származó println() függvény a readInt() függvény meghívására az „os” objektum bemeneti adatfolyam objektumon keresztül megtörtént, hogy megjelenítse a new.txt fájl adatait. Ezt követően lezártuk a kimeneti és bemeneti adatfolyamot a megfelelő „o” és „os” objektumokkal, a java fájlkezelésének „bezárás” funkciójával. Ez egy szükséges lépés a folyamok lezárásához, hogy más felhasználó ne tudjon adatokat bevinni vagy kiadni egy fájlból. A catch() utasításon belül a getStackTrace() függvényt használtuk, hogy hibát kapjunk, és az „e” kivételváltozón keresztül megjelenítsük azt a képernyőn. Ez a program készen áll a shell-en történő végrehajtásra.





Éppen elmentettük a java kódfájlunkat a végrehajtás előtt, és a java kulcsszó utasítását használtuk a „test.java” fájl végrehajtására. Cserébe semmit sem ad vissza. Ezenkívül a „new.txt” szövegfájl adatainak megjelenítése a shell-en a „cat” utasítással szemét értéket jelenített meg. Ennek az az oka, hogy legtöbbször a java végrehajtó nem tudja beolvasni az egész értéket a fájlból. De valószínűleg a pontos egész értéket fogja megjeleníteni.



A new.txt fájl manuális megnyitásával történő ellenőrzésekor azt láttuk, hogy az érték Unicode formátuma jelenik meg a fájlban.

Ha nem tudja megjeleníteni az egész értéket a fájlfolyamból, akkor a writeInt() függvény helyett használhatja a Java program writeObject() függvényét, hogy a „d” értéket az „o” objektumon keresztül írja be a fájlfolyamba. ahogy megjelenik. Ezzel együtt a readInt() függvény helyett ki kell dobnia a „readObject()” függvényt, hogy megjelenítse a fájlbeviteli adatfolyam adatait.

A kód frissítése az egész számot jeleníti meg a végrehajtás során.

02. példa

Legyen egy másik java programozási érték is, amely a string típusú érték objektum bemeneti folyamát adja ki. Így ezt a példakódot a java ugyanazon FileInputStream, FileOutputStream, ObjectInputStream és ObjectOutputStream osztályának importálásával kezdtük a java könyvtár „io” csomagjából. A Main osztálynak van egy main() függvénye, amely elindítja a kód végrehajtását. A „d2” karakterlánc-változót hosszú karakterlánc-értékkel inicializálják.

Ugyanezt a try-catch utasítást a hiba elkerülése és a Java-kód zökkenőmentes végrehajtása érdekében elvetettük. Az „f” objektum a fájl kimeneti adatfolyamához a FileOutputStream osztályon keresztül jött létre, argumentumként a „new.txt” fájl használatával. Az „f” fájlkimeneti adatfolyam objektumot átadtuk az „o” kimeneti adatfolyam objektumnak, amelyet az ObjectOutputStream osztály használatával hoztak létre. Most az „o” kimeneti adatfolyam meghívja a writeObject() függvényt egy „d” karakterlánc-változó átadásával, amelyet a „new.txt” fájlba kell írni.

Ezután létrehozott egy „fs” fájlbeviteli adatfolyamot a FileInputStream osztály használatával úgy, hogy átadja neki a „new.txt” fájlnevet, azaz kiolvassa belőle az adatokat. Most az ObjectInputStream osztály „os” objektuma az „fs” fájlbemeneti adatfolyam objektumot használja az adatok olvasásához a java readObject() függvényével a „System.out” osztály „println” végrehajtási utasításában. Ezután hajlamosak vagyunk a bemeneti és kimeneti adatfolyamokat a „close” függvény hívásával lezárni, és a catch utasítást arra használjuk, hogy megkapjuk a try részben előforduló kivételeket, és elkerüljük a programvégrehajtás hirtelen bezárását.

Ennek a java kódfájlnak és a szöveges fájlnak a végrehajtása a string értéket jelenítette meg a konzolon.

Következtetés

Az ObjectInputStream osztály használata az egyetlen elérhető módszer a Serializable vagy Externalizable protokollt használó anyagok olvasására. Összefoglalva, megadtuk az összes szükséges részletet ahhoz, hogy a java objectinputstream osztályát használhassuk a fájl objektum bemeneti adatfolyamából származó adatok olvasásához. Ehhez két különböző Java kód példát öntöttünk ide. Az első példa az egész típusú bemeneti változó értékét használja, míg a második illusztráció a karakterlánc-változó értékének kidobását, azaz a bemeneti fájlfolyamból olvasott ki.