
Szerializáció Java-ban
A sorosítás a Java-ban olyan mechanizmus, amely az objektum állapotát bájtfolyammá alakítja. A deszerializáció fordított folyamata. A érdemesítés révén, bájt adatfolyamból, a memória a tényleges Java objektumot hozza létre. Egy ilyen mechanizmus megőrzi a tárgyat.
Az így létrehozott byte-folyam a szerializációtól nem függ egy platformon. Az egyik platformon sorosított objektum anélkül, hogy bármilyen kérdést feltehetne, bármilyen más platformon felhasználható. Így a sorosítás és az érdeklődés teljes folyamata JVM-től független.
Ha egy osztályobjektumot sorba kell állítani, akkor be kell állítania a java.io.Serializable felületet. A Java-ban sorozható egy marker interfész. Nincs mező vagy megvalósítási módszer. Az osztály sorozhatóvá teszi ezt a folyamatot, amely úgy néz ki, mint egy opt-in folyamat.
A Java sorozatba állítását az ObjectInputStream és ObjectOutputStream két osztály valósítja meg.
Ehhez csak egy burkolólapra van szükség, amely fájlba menthető, vagy hálózaton keresztül elküldhető.
A szérializáció fogalma Java-ban
Az ObjectOutputStream osztály, amely a fenti szakaszban említett sorosítási osztály, számos írási módszert tartalmaz különféle adattípusok írására, de az egyik módszer a legnépszerűbb
public final void writeObject(Object x) throws IOException
A fenti módszer felhasználható egy objektum sorosítására. Ez a módszer továbbítja a kimeneti adatfolyamhoz. Ugyanígy, az ObjectInputStream osztály tartalmazza az objektumok méltányossá tételének módszerét
public final Object readObject() throws IOException, ClassNotFoundException
A ansializációs módszer lehívja az objektumot egy adatfolyamból, és ugyanazt a ansializálást végzi. A visszatérési érték ismét objektum, tehát csak annyit kell tennie, hogy a releváns adattípushoz adja.
Ahhoz, hogy egy osztály sikeresen sorosodjon, két feltételnek kell teljesülnie -
- io. A soroztatható interfészt az osztálynak kell megvalósítania.
- Az osztály minden mezőjének sorosíthatónak kell lennie. Ha még egy mező nem is sorozható, akkor azt átmenetileg kell megjelölni.
Ha valakinek ellenőriznie kell, hogy egy osztály sorosítható-e, vagy sem, akkor az egyszerű megoldás az, ha ellenőrzik, hogy az osztály végrehajtja-e a java.io.Serializable módszert, ha igen, akkor sorosítható, ha nem, akkor nem.
Figyelembe kell venni, hogy amikor egy objektumot egy fájlba sorba rendeznek, a szokásos gyakorlat az, hogy a fájl .ser kiterjesztést adja meg.
A sorosítási módszer Java-ban
Ha ezek a módszerek jelen vannak az osztályban, akkor azokat a Java alkalmazásban történő sorosításra használják.
Eljárás | Leírás |
nyilvános végleges érvénytelen writeObject (objektum obj) az IOException programot dobja () | Ez a megadott objektumot írja az ObjectOutputStream fájlba. |
public void flush () dob az IOException-t () | Ez ellopja az aktuális kimeneti áramot. |
public void close () dobja az IOException-t () | Ez bezárja az aktuális kimeneti adatfolyamot. |
Deserializációs módszer Java-ban
Eljárás | Leírás |
nyilvános végső Object readObject () dob IOException, ClassNotFoundException () | Ez beolvassa az objektumot a bemeneti adatfolyamból. |
public void close () dobja az IOException-t () | Ez bezárja az ObjectInputStream elemet. |
Példák a Java szerializálására
Ebben a szakaszban példákkal tárgyalta a Java szerializációját.
Itt található egy példa a Java-ban, amely bemutatja, hogy a sorosítás hogyan működik a Java-ban. Létrehozunk Munkavállalói osztályt néhány szolgáltatás tanulmányozására, és ennek kódját az alábbiakban találjuk. Ez a munkavállalói osztály a Szerializálható felületet valósítja meg.
public class Employee implements java.io.Serializable (
public String name;
public String address;
public transient int SSN;
public int number;
public void mailCheck() (
System.out.println("Mailing a letter to " + name + " " + address);
)
)
Amikor ezt a programot végrehajtják a végrehajtással, létrejön egy töötaja.ser nevű fájl. Ez a program nem garantált eredményt nyújt, inkább csak magyarázó célokat szolgál, célja a használat és működés megértése.
import java.io.*;
public class SerializeDemo (
public static void main(String () args) (
Employee e = new Employee();
e.name = "Rahul Jain";
e.address = "epip, Bangalore";
e.SSN = 114433;
e.number = 131;
try (
FileOutputStream fileOut =
new FileOutputStream("/tmp/employee.ser");
ObjectOutputStream out = new ObjectOutputStream(fileOut);
out.writeObject(e);
out.close();
fileOut.close();
System.out.printf("Serialized data saved in /tmp/employee.ser");
) catch (IOException i) (
i.printStackTrace();
)
)
)
Az alábbiakban ismertetett DeserializeDemo program méltányossá teszi a Serialize Demo programban létrehozott fenti Munkavállalói objektumot .
import java.io.*;
public class DeserializeDemo (
public static void main(String () args) (
Employee e = null;
try (
FileInputStream fileIn = new FileInputStream("/tmp/employee.ser");
ObjectInputStream in = new ObjectInputStream(fileIn);
e = (Employee) in.readObject();
in.close();
fileIn.close();
) catch (IOException i) (
i.printStackTrace();
return;
) catch (ClassNotFoundException c) (
System.out.println("Employee class is not found");
c.printStackTrace();
return;
)
System.out.println("Deserialized Employee…");
System.out.println("Name: " + e.name);
System.out.println("Address: " + e.address);
System.out.println("SSN: " + e.SSN);
System.out.println("Number: " + e.number);
)
)
A fenti kód a következő eredményt fogja eredményezni -
Kimenet
Deszerializált alkalmazott…
Név: Rahul Jain
Cím: epip, Bangalore
SSN: 0
Száma: 131
Az alábbiakban bemutatjuk a fenti programmal kapcsolatos néhány fontos pontot -
- A fenti try / catch blokk megpróbálja elkapni a ClassNotFoundException-t. Ezt a readObject () módszer deklarálja.
- A JVM csak akkor értékelheti meg az objektumot, ha megtalálja az osztály byte kódját.
- Ha a JVM nem talál osztályt az érdeklődés során, akkor a ClassNotFoundException programot dobja.
- A readObject () visszatérési értékét mindig egy Munkavállalói referencia alapján kell megadni.
- Az SSN mező értéke kezdetben 114433 volt, amikor az objektum sorosodott, de mivel ezt az értéket nem küldték el a kimeneti adatfolyamnak. Ugyanezen okból kifizetődőként alkalmazott Employee SSN mezőobjektum 0.
Következtetés
A fentiekben bemutattuk a sorosítási koncepciókat és példákat mutattunk be. Megértjük a sorosítás szükségességét befejező megjegyzésünkként.
- Kommunikáció: Ha két, ugyanazt a kódot futtató gépnek kommunikálnia kell az egyszerű megoldással, akkor az egyik gépnek fel kell építenie egy objektumot, amely információkat továbbít, majd sorba kell állítania azt, mielőtt elküldi a másik gépnek. Nem nagyszerű módszer, de elvégzi a munkát.
- Perzisztencia: Ha a működési állapotot adatbázisban kell tárolni, először egy byte-tömbre sorosítják, majd az adatbázisban tárolják, hogy későbbi időpontban lekérdezzék.
- Mélymásolás : Ha egy objektum pontos javítását kell létrehozni, és a speciális klónosztály írása túl sok munka, akkor az objektum csak az objektum sorosítása, majd egy másik objektumra való szétosztása révén érheti el a célt.
- Kereszt JVM szinkronizálás: A különböző gépeken és architektúrákon futó különböző JVM szinkronizálható.
Ajánlott cikkek
Ez útmutatóként szolgál a Java szerializálásához. Itt példákkal tárgyaltuk a Java szerializációjának különféle módszereit. A következő cikkben további információkat is megnézhet -
- Java fejlesztői interjúkérdések
- Java lista vs tömblista
- A JavaScript felhasználása