See also ebooksgratis.com: no banners, no cookies, totally FREE.

CLASSICISTRANIERI HOME PAGE - YOUTUBE CHANNEL
Make a donation: IBAN: IT36M0708677020000000008016 - BIC/SWIFT:  ICRAITRRU60 - VALERIO DI STEFANO or
Privacy Policy Cookie Policy Terms and Conditions
Serializacja - Wikipedia, wolna encyklopedia

Serializacja

Z Wikipedii

Serializacja – w programowaniu komputerów proces przekształcania obiektów, tj. instancji określonych klas, do postaci szeregowej, czyli w strumień bajtów, z zachowaniem aktualnego stanu obiektu. Serializowany obiekt może zostać utrwalony w pliku dyskowym, przesłany do innego procesu lub innego komputera poprzez sieć. Procesem odwrotnym do serializacji jest deserializacja. Proces ten polega na odczytaniu wcześniej zapisanego strumienia danych i odtworzeniu na tej podstawie obiektu klasy wraz z jego stanem bezpośrednio sprzed serializacji.

Serializacja służy do zapisu stanu obiektu, a później do odtworzenia jego stanu. Mechanizm ten jest używany między innymi na platformach .NET, Java, PHP, Python.

Spis treści

[edytuj] Jak działa serializacja?

[edytuj] Serializacja na platformie .NET

Istnieją dwa sposoby serializacji:

Poniżej znajduje się przykład klasy w języku Delphi for .NET, której obiekty mogą być serializowane:

type
 [Serializable] // Obiekty tej klasy będą mogły być serializowane
 TSerializableClass = class
   FName: System.&String;
   FValue: System.Int32;
   [NonSerialized] // Nie serializuj poniższego pola
   FNonSerialized: System.Int16;
 end;

Klasa zawiera trzy pola, przy czym jedno z nich - FNonSerialized - nie będzie serializowane (wskazuje na to atrybut NonSerialized).

Środowisko .NET oferuje dwa podstawowe formaty zapisu (formatery) serializowanych klas: binarny oraz SOAP.

Środowisko uruchomieniowe CLR podczas procesu serializacji tworzy graf obiektu. Każdy obiekt posiada swój identyfikator. Wszystkie obiekty odwołujące się do serializowanego obiektu są wiązane z obiektem głównym.

[edytuj] Formatery

Zadaniem formatera jest konwersja obiektu do formatu, w którym zostanie zserializowany obiekt, lub z którego zostanie zdeserializowany. Platforma .NET udostępnia dwa podstawowe formatery: binarny (obiekt zostanie zapisany jako ciąg zero-jedynkowy; formater zdefiniowany w przestrzeni nazw System.Runtime.Serialization.Formatters.Binary) oraz SOAP (obiekt zostanie zapisany w formacie XML; formater zdefiniowany w przestrzeni nazw System.Runtime.Serialization.Formatters.SOAP). System formaterów jest rozszerzalny..

[edytuj] Serializacja w języku Java

By obiekt mógł być serializowany musi implementować interfejs Serializable. Dla wygody sporo standardowych klas javy implementuje ten interfejs, nie ma więc potrzeby wyprowadzać np. własnego obiektu będącego dzieckiem klasy Vector.

Jeśli będziesz serializował obiekt który agreguje inne obiekty to serializacji ulegnie cała hierarchia obiektów, jednak każdy z nich musi implementować interfejs Serializable. Przykładem może być serializacja wyżej wspomnianego wektora.

Ważna uwaga: Jeśli zmieni się klasa obiektu który zserializowałeś to nie uda Ci się takiego obiektu zdeserializować używając nowej implementacji obiektu. Unikaj więc przenoszenia logiki do serializowanych danych.

Popatrz na przykład:

package test;
 
 import java.io.Serializable;
 
 public class Acount implements Serializable {
   private String surname = null;
   private String firstname = null;
 
   public Acount (String surname, String firstname) {
     this.surname = surname;
     this.firstname = firstname;
   }
 
   public String getFirstname() {
     return firstname;
   }
 
   public String getSurname() {
     return surname;
   }
 
 }

Zauważ, że interface Serializable nie wymaga od Ciebie implementacji żadnej metody. Każdy obiekt który zaimplementował interfejs Serializable możesz serializować/deserializować do/ze strumienia. Dla naszego powyższego przykładu i serializacji do pliku o nazwie test.ser mogłoby to wyglądać tak jak poniżej:

Acount a = new Acount("Jan","Nowak");
 FileOutputStream fos = null;
 ObjectOutputStream oos = null;
 /*
  * Zapis do strumienia (plikowego, ale może być dowolne)
  */
 try {
   fos= new FileOutputStream("test.ser"); //utworzenie strumienia wyjściowego
   oos = new ObjectOutputStream(fos);  //utworzenie obiektu zapisującego do strumienia
 
   oos.writeObject(a); //serializacja obiektu
 
 } catch (FileNotFoundException e) {
   e.printStackTrace();
 } catch (IOException e) {
   e.printStackTrace();
 } finally {
   // zasoby zwalniamy w finally
   try {
     if (oos != null) oos.close();
   } catch (IOException e) {}
   try {
     if (fos != null) fos.close();
   } catch (IOException e) {}
 }

Odczytuje się tak samo, ale używa obiektów odczytu a nie zapisu:

Acount b = null;
 /*
  * Odczyt ze strumienia plikowego (ale może być dowolne)
  */
 FileInputStream fis = null;
 ObjectInputStream ois = null;
 try {
   fis = new FileInputStream("test.ser"); //utworzenie strumienia wejściowego  
   ois = new ObjectInputStream(fis); //utworzenie obiektu odczytującego obiekty ze strumienia
 
   b = (Acount) ois.readObject(); //deserializacja obiektu
 
 } catch (FileNotFoundException e) {
   e.printStackTrace();
 } catch (IOException e) {
   e.printStackTrace();
 } catch (ClassNotFoundException e) {
   e.printStackTrace();
 } finally {
   // zasoby zwalniamy w finally
   try {
     if (ois != null) ois.close();
   } catch (IOException e) {}
   try {
     if (fis != null) fis.close();
   } catch (IOException e) {}
 }

[edytuj] Zobacz też


aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu -

Static Wikipedia 2007 (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu -

Static Wikipedia 2006 (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu -