JavaRush /Java Blog /Random-TK /Java-da serializasiýa nähili işleýär
ramhead
Dereje

Java-da serializasiýa nähili işleýär

Toparda çap edildi
Bu makalada seriallaşdyrmagyň nämedigini we Java-da nähili işleýändigini düşündireris. Java-da serializasiýa nähili işleýär - 1

Giriş

Obýektiň seriýallaşdyrylmagy, obýektiň özüniň we başga bir obýektiň çykyş akymyny (mysal üçin, daşarky faýla) ulanyp, doly göçürmesini saklamak ukybydyr. Şeýlelik bilen, zerur bolanda biraz soň seriallaşdyrylan (saklanan) göçürmeden obýekt döredilip bilner. JDK 1.1-de girizilen obýektleriň seriýallaşdyrylmagy, toparlary ýa-da aýry-aýry obýektleri bit akymyna ýa-da baýt massiwine, torda saklamak ýa-da geçirmek üçin funksiýa üpjün edýär. Bellenilişi ýaly, belli bir akym ýa-da baýt massiwini Java obýektlerine öwrüp bolýar. ObjectInputStreamBu esasan synplaryň we synplaryň kömegi bilen awtomatiki ýagdaýda bolýar ObjectOutputStream. Programmist, Serializablesynpy döredeniňizde interfeýsi durmuşa geçirip, bu funksiýany durmuşa geçirmegi karar edip biler. Serializasiýa prosesi obýektiň marşaly diýlip hem atlandyrylýar, deserializasiýa bolsa deňsiz-taýsyz diýilýär . Seriallaşdyrma, bir obýektiň öz nusgasyny we obýekt tarapyndan görkezilen beýleki obýektleriň daşarky faýlda saklanmagyna mümkinçilik berýän mehanizmdir ObjectOutputStream. Saklanan obýektler, JFramegörnüşine garamazdan maglumat gurluşlary, diagrammalar, synp obýektleri ýa-da başga zatlar bolup biler. Şol bir wagtyň özünde, seriallaşdyrma obýektiň haýsy görnüşi barada maglumatlary saklaýar, deserializasiýa edilende, şol obýektiň takyk görnüşini döretmek üçin ulanylýar. Şeýlelik bilen, seriýalaşdyrmak aşakdaky mümkinçilikleri üpjün edýär:
  • Obýektleri saklamak üçin ulgam, meselem: häsiýetlerini daşarky faýla, diske ýa-da maglumat bazasyna saklamak.
  • Uzakdan prosedura jaň ulgamy.
  • Obýekt paýlaýyş ulgamy, mysal üçin, COM, COBRA ýaly programma üpjünçiliginde.
  • Wagtyň geçmegi bilen üýtgeýän maglumatlaryň üýtgemelerini kesgitlemek üçin ulgam.
Seriýalaşdyrmak düşünjesine doly düşünmek üçin beýleki iki düşünje - obýektiň tutanýerliligi we sapaklaryň dowamlylygy barada aýdyň düşünmeli. Bu ýerde ýatda saklamak üçin olaryň hersi hakda azajyk gürleşeris. Olary doly düşündirmek, bu düşünjeleriň her biri üçin aýratyn bölüm talap eder.

Akymlar:

Her bir programma maglumatlaryny ammar ýerine ýa-da turba ýazmalydyr we her bir programma turbadan ýa-da ammar ýerinden maglumatlary okamalydyr. Java-da, programmalaryň ýazýan we haýsy programmalaryň maglumatlary okaýan bu kanallaryna Akym ( Stream) diýilýär . Java-da serializasiýa nähili işleýär - 2
Surat 1. Sapaklaryň grafiki görnüşi
Akymlar esasan iki görnüşe bölünýär:
  • * Akymlar diýlip atlandyrylýan baýt akym sapaklary
  • * Okyjy we * iterazyjy diýilýän nyşan akym sapaklary
Maglumat ýazmagyň her akymynda ýazuw usullarynyň toplumy bar. Maglumatlary okamagyň her birinde şuňa meňzeş okamak usullary bar. Ip döredilenden soň, bu usullaryň hemmesini çagyrmaly.

Tutanýerlilik

Obýektiň tutanýerliligi, obýektiň ýaşamak ýa-da başgaça aýdylanda, programmanyň ýerine ýetirilişinden “diri galmak” ukybydyr. Diýmek, iş wagty döredilen islendik obýekt, haçan-da şol obýekt ulanylmasa, JVM garakçy tarapyndan ýok edilýär. Emma tutanýerlilik API durmuşa geçirilse, bu obýektler JVM garakçy tarapyndan ýok edilmez, tersine, "ýaşamaga" rugsat berler, bu hem indiki gezek programma açylanda olara girmäge mümkinçilik berýär. Başgaça aýdylanda, tutanýerlilik, işleýän programmanyň ömrüne garaşsyz bir obýekt üçin ömrüň bardygyny aňladýar. Tutanýerliligi amala aşyrmagyň bir usuly, obýektleri daşarky faýlda ýa-da maglumat bazasynda bir ýerde saklamak, soňra bolsa şol faýllary ýa-da maglumat bazasyny çeşme hökmünde ulanyp, soňrak dikeltmekdir. Ine, seriallaşdyrma ýerine ýetirilýär. JVM işleýänçä, dowam etmeýän islendik zat bar. Seriýalaşdyrylan obýektler diňe akymlara öwrülen obýektler bolup, soňra daşarky faýlda saklanýar ýa-da saklamak we dikeltmek üçin tor arkaly geçirilýär.

Serializable interfeýsini durmuşa geçirmek

java.io.SerializableIslendik synp şol synpyň obýektlerini seriallaşdyrmak üçin interfeýs girizmeli . Interfeýsiň Serializablehiç hili usuly ýok we diňe serializasiýa edilip bilinmegi üçin synpy belleýär. Diňe yzygiderli synp obýektiniň meýdanlary saklanyp bilner. Usullar ýa-da konstruktorlar yzygiderli akymyň bir bölegi hökmünde saklanmaýar. Islendik bir obýekt başga bir obýekte salgylanma hökmünde hereket edýän bolsa, şol obýektiň synpy interfeýsi ýerine ýetirýän bolsa, şol obýektiň meýdanlary hem seriýalaşdyrylýar Serializable. Başgaça aýdylanda, şeýlelik bilen alnan bu obýektiň grafigi doly seriýallaşdyrylýar. Obýektiň grafigi bir obýektiň meýdanlaryny we onuň subýektlerini öz içine alýar. Interfeýsi durmuşa geçirmäge kömek edýän iki esasy synp Seriliazable:
  • ObjectInputStream
  • ObjectOutputStream
Sanaw 1. Seriallaşdyrmagy görkezmek üçin ýönekeý synpyň mysaly
import java.io.*;
public class RandomClass implements Serializable {
 // Генерация рандомного значения
 private static int r() {
        return (int)(Math.random() * 10);
 }
    private int data[];
    // Конструктор
public RandomClass() {
        datafile = new int[r()];
        for (int i=0; i<datafile.length; i++)
        datafile[i]=r();
 }
    public void printout() {
 System.out.println("This RandomClass has "+datafile.length+" random integers");
 for (int i=0; i<datafile.length; i++) {
        System.out.print(datafile[i]+":");
        System.out.println();
    }
}
Aboveokardaky kodda serializasiýa edilip bilinýän synp döredilýär seriallaşdyrma interfeýsi bilen "bellendi". Synp, bir mysal döredilende tötänleýin bitewi sanlary döredýär. Aşakdaky kod, obýektleri ulanyp, akymlara obýekt ýazmak ukybyny görkezýär ObjectOutputStream. Programmada bitewi san bar, ýöne seriallaşdyrmak üçin içerki obýektleriň üstünde gaýtalamaly däl. Interfeýs Seriliazablebu barada awtomatiki alada edýär. Sanaw 2. Faýla çykmak üçin obýektleri seriallaşdyrmagyň ýönekeý mysaly
import java.io.*;
import java.util.*;
public class OutSerialize {
    public static void main (String args[]) throws IOException {
        RandomClass rc1 = new RandomClass();
        RandomClass rc2 = new RandomClass();
//создание цепи потоков с потоком вывода an object в конце
ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("objects.dat"));
        Date now = new Date(System.currentTimeMillis());
//java.util.* был импортирован для использования класса Date
        out.writeObject(now);
        out.writeObject(rc1);
        out.writeObject(rc2);
out.close();
        System.out.println("I have written:");
System.out.println("A Date object: "+now);
        System.out.println("Two Group of randoms");
rc1.printout();
rc2.printout();
 }
}
ObjectInputStreamAşakdaky kod , daşarky faýldan yzygiderli maglumatlary bir programma okaýan synpyň mümkinçiliklerini görkezýär . Obýektleriň faýla ýazylan tertipde okalýandygyna üns beriň. Sanaw 3. Seriýalaşdyrylan zatlary okamak ýa-da Deserializasiýa
import java.io.*;
import java.util.*;
public class InSerialize {
 public static void main (String args[]) throws  IOException, ClassNotFoundException {
    ObjectInputStream in =  new ObjectInputStream (new FileInputStream("objects.dat"));
 Date d1 = (Date)in.readObject();
 RandomClass rc1 = (RandomClass)in.readObject();
    RandomClass rc2 = (RandomClass)in.readObject();
    System.out.println("I have read:");
    System.out.println("A Date object: "+d1);
    System.out.println("Two Group of randoms");
    rc1.printout();
rc2.printout();
 }
}
Java synplarynyň hemmesini diýen ýaly AWT synplaryny hem seriallaşdyryp bolýar. Penjire bolan çarçuwada grafiki komponentleriň toplumy bar. Çarçuwalar seriýalaşdyrylan bolsa, seriallaşdyryş dwigateli bu barada alada edýär we ähli komponentlerini we maglumatlaryny (ýagdaýy, mazmuny we ş.m.) seriallaşdyrýar. Käbir Java synp obýektlerini seriýalaşdyryp bolmaýar, sebäbi olarda efemer operasiýa ulgamynyň çeşmelerine salgylanýan maglumatlar bar. Mysal üçin sapaklar java.io.FileInputStreamwe java.lang.Thread. Eger bir obýekt seriallaşdyrylmaýan elementlere salgylanmalary öz içine alýan bolsa, seriallaşdyrmagyň ähli işi şowsuz bolar we kadadan çykma bolar NotSerializableException. Islendik obýekt deslapky däl obýektiň salgylanmasyny aňladýan bolsa, wagtlaýyn açar söz ulanyp seriallaşdyrylyp bilner . Sanaw 4. Geçiş açar sözüni ulanyp seriallaşdyrylýan obýektleri döretmek
public class Sclass implements Serializable{
public transient Thread newThread;
//помните, что поток(поток параллельного исполнения) по умолчанию не сериализуемый класс
    private String studentID;
    private int sum;
}

Seriýalaşdyrmakda howpsuzlyk

Java-da synpy seriýalaşdyrmak, ähli maglumatlary akym arkaly daşarky faýla ýa-da maglumat bazasyna geçirmegi göz öňünde tutýar. Islän wagtymyz seriýalanjak maglumatlary çäklendirip bileris. Muny etmegiň iki ýoly bar:
  • Wagtlaýyn diýlip yglan edilen her synp parametri seriýalaşdyrylanok (tertip boýunça ähli synp parametrleri seriýalaşdyrylýar)
  • , A-da, seriallaşdyrmak isleýän synpymyzyň her bir parametri bellik bilen bellenýär Externalizable(deslapky tertipde hiç bir parametr seriýalaşdyrylmaýar).
Şol obýektiň maglumat meýdany wagtlaýynObjectOutputStream bellenen bolsa, bir obýekt çagyrylanda maglumat meýdany seriýalaşdyrylmaz . Mysal üçin : . Başga bir tarapdan, obýektiň maglumatlaryny seriýalaşdyrylýandygyny aç-açan yglan etmek üçin synpy şol obýektiň maglumatlaryny aç-açan ýazmak we okamak diýip bellemelidiris.private transient String passwordExternalizablewriteExternalreadExteranl

Netije

Obýektleriň seriýallaşdyrylmagynyň aýratynlygy maglumatlary geçirmegiň usuly hökmünde köp paýlanan ulgamlarda ulanylýar. Emma seriallaşdyrma gizlin jikme-jiklikleri açýar, şeýlelik bilen abstrakt maglumatlaryň görnüşleriniň hakykylygyny ýok edýär, bu bolsa öz gezeginde encapsulýasiýany ýok edýär. Şol bir wagtyň özünde, yzygiderli obýektiň maglumatlarynyň asyl, asyl obýektdäki maglumatlardygyny bilmek ýakymly. Bu, şeýle hem , birnäçe setir ulanylsa-da, interfeýsi durmuşa geçirmek ObjectInputValidationwe usuly ýok etmek üçin ajaýyp mümkinçilikdir. validateObject()Eger obýekt tapylmasa, kadadan çykmany taşlap bileris InvalidObjectException. Asyl makala: Java-da seriallaşdyrmagyň nähili işleýändigi
Teswirler
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION