Sunteți pe pagina 1din 6

Serializarea obiectelor

Serializarea obiectelor

Serializarea este o metodă prin care se pot salva, într-o manieră unitară, datele împreună cu signatura unui
obiect. Folosind această operaţie se poate salva într-un fişier, ca şir de octeţi, o instanţă a unei clase, în orice
moment al execuţiei. De asemenea, obiectul poate fi restaurat din fişierul în care a fost salvat în urma unei
operaţii de serializare.
Salvarea datelor înapsulate într-un obiect se poate face şi prin salvarea pe rând a datelor, folosind clasa
DataOutputStream, pentru ca apoi să fie restaurate prin metode ale clasei DataInputStream, dar o asemenea
abordare nu este în general suficientă, deoarece pot apărea probleme cum ar fi :
 datele obiectului pot fi instanţe ale altor obiecte
 în unele cazuri, este necesară şi salvarea tipului datei
 unele câmpuri fac referinţă la acelaşi obiect
Aşadar, prin serializare sunt surprinse atât datele, signatura clasei (numele metodelor şi definiţia lor - nu
şi implementarea) precum şi starea obiectului.
Pentru a putea fi serializat un obiect trebuie să fie instanţă a unei clase care implementează una din
interfeţele :
- java.io.Serializable sau
- java.io.Externalizable (care extinde clasa Serializable)

Interfaţa Serialize nu are nici o metodă, ea dă doar posibilitatea de a specifica faptul că se doreşte ca o anumită
clasă să poată fi serializată. Declaraţia unei astfel de clase ar fi :
class ClasaSerializabila implements Serializable {...}

In urma serializării obiectele sunt pot fi salvatr într-un fişier, în acelaşi fişier putând fi salvate şi mai multe obiecte.
Operaţiile de intrare ieşire la nivelul obicetelor se realizează prin intermediul unor fluxuri de obiecte, implementate
de clasele ObjectInputStream şi ObjectOutputStream.

Salvarea unui obiect într-un fişier se realizează astfel :

MyObject o = new MyObject();


FileOutputStream fout = new FileOutputStream(“fisier”);
ObjectOutputStream sout = new ObjectOutputStream(fout);
sout.writeObject(o);

Restaurarea unui obiect salvat într-un fişier se face într-o manieră asemănătoare:
FileInputStream fin = new FileInputStream(“fisier”);
ObjectInputStream sin = new ObjectInputStream(fin);
o = (MyObject) sin.readObject();

Pe lângă metodele de scriere/citire a obiectelor cele două clase pun la dispoziţie şi metode pentru scrierea
tipurilor de date primare, astfel încât apeluri ca cele de mai jos sunt permise :
FileOutputStream ostream = new FileOutputStream("t.tmp");
ObjectOutputStream p = new ObjectOutputStream(ostream);
p.writeInt(12345);
p.writeObject("Today");
p.writeObject(new Date());
p.flush();
ostream.close();

FileInputStream istream = new FileInputStream("t.tmp");


ObjectInputStream p = new ObjectInputStream(istream);
int i = p.readInt();
String today = (String)p.readObject();
Date date = (Date)p.readObject();

1
Serializarea obiectelor
istream.close();

ObjectInputStream şi ObjectOutputStream implementează indirect interfeţele DataInput, respectiv DataOutput,


interefţe ce declară metode atât pentru scrierea/citirea datelor primitive, cât şi pentru scrierea/citirea obiectelor.
Pentru transferul obiectelor sunt folosite metodele:

final void writeObject( java.lang.Object obj )


throws java.io.IOException
final java.lang.Object readObject( )
throws java.io.OptionalDataException, java.lang.ClassNotFoundException, java.io.IOException
Acestea apelează la rândul lor metodele implicte de transfer defaultWriteObject şi defaultReadObject (având
aceleaşi signaturi ca mai sus)

Clasa ObjectOutputStream
Constructor
public ObjectOutputStream( java.io.OutputStream out )
throws java.io.IOException

Metode

void close( ) throws java.io.IOException


final void defaultWriteObject( ) throws java.io.IOException
void flush( ) throws java.io.IOException
void reset( ) throws java.io.IOException
void write( byte[] b ) throws java.io.IOException
void write( byte[] b, int off, int len ) throws java.io.IOException

void write( int data ) throws java.io.IOException


void writeBoolean( boolean data ) throws java.io.IOException
void writeByte( int data ) throws java.io.IOException
void writeBytes( java.lang.String data ) throws java.io.IOException
void writeChar( int data ) throws java.io.IOException

void writeChars( java.lang.String data ) throws java.io.IOException


void writeDouble( double data ) throws java.io.IOException
void writeFloat( float data ) throws java.io.IOException
void writeInt( int data ) throws java.io.IOException
void writeLong( long data ) throws java.io.IOException

final void writeObject( java.lang.Object  obj )


throws java.io.IOException
void writeShort( int data ) throws java.io.IOException
void writeUTF( java.lang.String data ) throws java.io.IOException

Clasa ObjectInputStream

Constructor

public ObjectInputStream( java.io.InputStream in )


throws java.io.IOException, java.io.StreamCorruptedException

Create an ObjectInputStream that reads from the specified InputStream. The stream header containing the magic
number and version number are read from the stream and verified. This method will block until the corresponding
ObjectOutputStream has written and flushed the header.

2
Serializarea obiectelor
Metode

int available( ) throws java.io.IOException


void close( ) throws java.io.IOException
final void defaultReadObject( )
throws java.io.IOException, java.lang.ClassNotFoundException, java.io.NotActiveException
int read( byte[] data, int offset, int length )
throws java.io.IOException
int read( ) throws java.io.IOException
boolean readBoolean( ) throws java.io.IOException
byte readByte( ) throws java.io.IOException
char readChar( ) throws java.io.IOException
double readDouble( ) throws java.io.IOException
float readFloat( ) throws java.io.IOException
void readFully( byteşţ data ) throws java.io.IOException
void readFully( byteşţ data, int offset, int size )
throws java.io.IOException
int readInt( ) throws java.io.IOException
java.lang.String readLine( ) throws java.io.IOException
long readLong( ) throws java.io.IOException
final java.lang.Object readObject( )
throws java.io.OptionalDataException, java.lang.ClassNotFoundException, java.io.IOException
short readShort( ) throws java.io.IOException
int readUnsignedByte( ) throws java.io.IOException
int readUnsignedShort( ) throws java.io.IOException
java.lang.String readUTF( ) throws java.io.IOException
ynchronized void registerValidation( java.io.ObjectInputValidation obj,
int prio )
throws java.io.NotActiveException, java.io.InvalidObjectException
int skipBytes( int len ) throws java.io.IOException

Cuvintul cheie transient

Pentru ca un anumit câmp să nu fie salvat în urma serializării, acesta trebuie declarat cu modificatorul
transient. Aceste câmpuri vor fi ignorate de metodele writeObject şi readObject.
Ex:
private transient x;  ignorat la serializare

Exemplu:
import java.io.*;

public class TestSerial {


static MyObject obj;
public static void main(String args[]) {
obj = new MyObject(10,20);
try {
FileOutputStream fout = new
FileOutputStream("fisier.tmp");
ObjectOutputStream sout = new
ObjectOutputStream(fout);
sout.writeObject(obj);
sout.flush();
sout.close();
fout.close();
System.out.println("A fost salvat obiectul " + obj);
}

3
Serializarea obiectelor

catch (IOException e) {}
System.out.println("Restauram...");
try {
FileInputStream fin = new
FileInputStream("fisier.tmp");
ObjectInputStream sin = new ObjectInputStream(fin);
try {
obj = (MyObject) sin.readObject();
}
catch (ClassNotFoundException e) {}

sin.close();
fin.close();
System.out.println("A fost restaurat obiectul " + obj);
}
catch (IOException e) {}
}
}

class MyObject implements Serializable {


int x;
private transient int y;

public MyObject(int x, int y) {


this.x = x;
this.y = y;
}

public String toString() {


return new String("x=" + x + ", y="+y);
}
}

Rezultatul acestui program va fi :


A fost salvat obiectul x=10, y=20
Restauram...
A fost restaurat obiectul x=10, y=0

Obs. Atunci când o clasă serializabilă derivă dintr-o altă clasă, salvarea câmpurilor clasei părinte se va face
doar dacă şi aceasta este serializabilă. In caz contrar, subclasa trebuie să salveze explicit şi câmpurile moştenite.
Ex1:
class Parinte implements Serializable {
int x;
...
}
class Fiu extends Parinte implements Serializable {
int y;
...
}
La serializare se salvează atât x cât şi y.
Ex1:
class Parinte {
int x;
...

4
Serializarea obiectelor
}
class Fiu extends Parinte implements Serializable {
int y;
...
}
Serializarea nu decurge normal.

Folosirea serializării pentru copierea obiectelor

Se ştie că nu putem copia un obiect prin instrucţiunea de atribuire. O secvenţă de forma:


MyObject o1 = new MyObject(10, 20);
MyObject o2 = o1;
nu face decât să declare obiectul o2 ca fiind o referinţă la obiectul o1. Orice schimbare într-unul din cele două
obiecte se va reflecta şi în celălalt.
o1 o2

date

O posibilitate de a face o copie unui obiect este folosirea metodei clone() a clasei Object.
MyObject o1 = new MyObject(10, 20);
MyObject o2 = (MyObject) o1.clone();
o1 o2

date date(copie)

referinţă

Conversia la clasa MyObject este necesară deoarece metoda clone() returnează un obiect de tip Object.
Deficienţa acestei metode este că nu funcţionează corect decât atunci când clasa clonată nu are câmpuri referinţă
către alte obiecte, obiectele referite nemaifiind copiate la rândul lor.

O metodă clone() care să realizeze o copie efectivă a unui obiect, împreună cu copierea tuturor obiectelor
referite de câmpurile acelui obiect poate fi implementată prin mecanismul serializării astfel :

public Object clone() {


try {
ByteArrayOutputStream bout = new ByteArrayOutputStream();
ObjectOutputStream out = new ObjectOutputStream(bout);
out.writeObject(this);
out.close();

ByteArrayInputStream bin = new ByteArrayInputStream();


ObjectInputStream in = new ObjectInputStream(bin);

Object ret = in.readObject();


in.close();
return ret;
}

catch (Exception e) {
System.out.println(e);
return null;
}

5
Serializarea obiectelor
}

S-ar putea să vă placă și

  • Serializarea
    Serializarea
    Document4 pagini
    Serializarea
    winchester lung
    Încă nu există evaluări
  • Serializarea Curs Java
    Serializarea Curs Java
    Document6 pagini
    Serializarea Curs Java
    Razvan Juretcu
    Încă nu există evaluări
  • Serializare C#
    Serializare C#
    Document23 pagini
    Serializare C#
    Simona Diana
    Încă nu există evaluări
  • Laboratorul 5
    Laboratorul 5
    Document7 pagini
    Laboratorul 5
    ion
    Încă nu există evaluări
  • 4 Serializare
    4 Serializare
    Document8 pagini
    4 Serializare
    Данилов Алина
    Încă nu există evaluări
  • Lucrare Individuala-Balan Ion CR-191FR
    Lucrare Individuala-Balan Ion CR-191FR
    Document7 pagini
    Lucrare Individuala-Balan Ion CR-191FR
    ion
    Încă nu există evaluări
  • Curs 13 POO
    Curs 13 POO
    Document9 pagini
    Curs 13 POO
    R0ckstar
    Încă nu există evaluări
  • Fisiere - POO
    Fisiere - POO
    Document9 pagini
    Fisiere - POO
    Albu Daniela Gabriela
    Încă nu există evaluări
  • Serializarea
    Serializarea
    Document8 pagini
    Serializarea
    Roxana C. Livia
    Încă nu există evaluări
  • Curs 12
    Curs 12
    Document26 pagini
    Curs 12
    Daniel Popa
    Încă nu există evaluări
  • Laborator 9
    Laborator 9
    Document12 pagini
    Laborator 9
    user.giu
    Încă nu există evaluări
  • ! Help Java
    ! Help Java
    Document50 pagini
    ! Help Java
    Mircea Tirziu
    Încă nu există evaluări
  • JAVA - Lucrare de Labarator
    JAVA - Lucrare de Labarator
    Document5 pagini
    JAVA - Lucrare de Labarator
    Valentin Bencheci
    Încă nu există evaluări
  • 4 Fluxuri
    4 Fluxuri
    Document10 pagini
    4 Fluxuri
    Dorw123
    Încă nu există evaluări
  • Aplicatie Java
    Aplicatie Java
    Document3 pagini
    Aplicatie Java
    Mast3rm1nd
    Încă nu există evaluări
  • Lucrarea de Laborator nr4 - C++
    Lucrarea de Laborator nr4 - C++
    Document10 pagini
    Lucrarea de Laborator nr4 - C++
    CapitanMD
    Încă nu există evaluări
  • Fluxuri
    Fluxuri
    Document3 pagini
    Fluxuri
    andreeaciocan
    Încă nu există evaluări
  • Java Basics
    Java Basics
    Document123 pagini
    Java Basics
    Alexandru Ionescu
    Încă nu există evaluări
  • Curs7 - Entitati Asocieri Agregate - Fisiere
    Curs7 - Entitati Asocieri Agregate - Fisiere
    Document19 pagini
    Curs7 - Entitati Asocieri Agregate - Fisiere
    winchester lung
    Încă nu există evaluări
  • Lab11 POO Calc
    Lab11 POO Calc
    Document14 pagini
    Lab11 POO Calc
    akonbeast
    Încă nu există evaluări
  • MIPI Pirlea Cristian CR-212 L4
    MIPI Pirlea Cristian CR-212 L4
    Document13 pagini
    MIPI Pirlea Cristian CR-212 L4
    bidlo 123
    Încă nu există evaluări
  • Colectii
    Colectii
    Document15 pagini
    Colectii
    adipistea
    Încă nu există evaluări
  • Lucrarea de Laborator TAP NR 1
    Lucrarea de Laborator TAP NR 1
    Document10 pagini
    Lucrarea de Laborator TAP NR 1
    Calc 182
    Încă nu există evaluări
  • POO Limbajul Java Teorie Si Aplicatii
    POO Limbajul Java Teorie Si Aplicatii
    Document120 pagini
    POO Limbajul Java Teorie Si Aplicatii
    Daniel Rotari
    0% (1)
  • Indrumar TAP
    Indrumar TAP
    Document120 pagini
    Indrumar TAP
    Ion Popescu
    Încă nu există evaluări
  • Lucrarea de Laborator NR 1
    Lucrarea de Laborator NR 1
    Document10 pagini
    Lucrarea de Laborator NR 1
    Grosu Maxim
    Încă nu există evaluări
  • Indrumar Tehnici Avansate
    Indrumar Tehnici Avansate
    Document107 pagini
    Indrumar Tehnici Avansate
    zero n
    Încă nu există evaluări
  • ZinveliuIoana Cumulate Lab8 An1 Sem2
    ZinveliuIoana Cumulate Lab8 An1 Sem2
    Document12 pagini
    ZinveliuIoana Cumulate Lab8 An1 Sem2
    Ioana Zinveliu
    Încă nu există evaluări
  • SDA Lab 1
    SDA Lab 1
    Document16 pagini
    SDA Lab 1
    Ciobanu Alina
    Încă nu există evaluări
  • Lab 7
    Lab 7
    Document5 pagini
    Lab 7
    Lavinia Minodora Baluta
    Încă nu există evaluări
  • Exercitii Java
    Exercitii Java
    Document43 pagini
    Exercitii Java
    Patriciu Lazar
    100% (1)
  • Java Cap 2
    Java Cap 2
    Document27 pagini
    Java Cap 2
    bgd_tunning6838
    100% (1)
  • POO (Programare Orientată Pe Obiect)
    POO (Programare Orientată Pe Obiect)
    Document13 pagini
    POO (Programare Orientată Pe Obiect)
    Bianca Padurariu
    Încă nu există evaluări
  • Java 3
    Java 3
    Document43 pagini
    Java 3
    Alexandra Rosca
    Încă nu există evaluări
  • LL2 PAM ECiobanu
    LL2 PAM ECiobanu
    Document19 pagini
    LL2 PAM ECiobanu
    Ecaterina Ciobanu
    Încă nu există evaluări
  • Tap Lab5
    Tap Lab5
    Document8 pagini
    Tap Lab5
    Adrian Bodorin
    Încă nu există evaluări
  • Fire de Executie in Python
    Fire de Executie in Python
    Document13 pagini
    Fire de Executie in Python
    Marius Ionescu
    Încă nu există evaluări
  • Poo Programare Orientata Ob
    Poo Programare Orientata Ob
    Document8 pagini
    Poo Programare Orientata Ob
    istef2010
    Încă nu există evaluări
  • Curs8 - Reutilizare de Cod Prin Mostenire - Testarea Programelor
    Curs8 - Reutilizare de Cod Prin Mostenire - Testarea Programelor
    Document19 pagini
    Curs8 - Reutilizare de Cod Prin Mostenire - Testarea Programelor
    winchester lung
    Încă nu există evaluări
  • Proiect Java Si Python
    Proiect Java Si Python
    Document15 pagini
    Proiect Java Si Python
    Loredana Gheorghe
    Încă nu există evaluări
  • L3 Java1
    L3 Java1
    Document8 pagini
    L3 Java1
    Alexandru Grigoriță
    Încă nu există evaluări
  • PAM Lab 2 Rotaru Dan
    PAM Lab 2 Rotaru Dan
    Document17 pagini
    PAM Lab 2 Rotaru Dan
    Dan
    Încă nu există evaluări
  • BPC 5 Fișiere
    BPC 5 Fișiere
    Document42 pagini
    BPC 5 Fișiere
    Vitalie Ambrosi
    Încă nu există evaluări
  • Paoo C04 2021
    Paoo C04 2021
    Document55 pagini
    Paoo C04 2021
    LimonCello
    Încă nu există evaluări
  • Java - Lab4 Cina Filozofilor
    Java - Lab4 Cina Filozofilor
    Document6 pagini
    Java - Lab4 Cina Filozofilor
    Octavian Macovetchi
    Încă nu există evaluări
  • Paoo C08 2019
    Paoo C08 2019
    Document32 pagini
    Paoo C08 2019
    LimonCello
    Încă nu există evaluări
  • ATP Fisiere Binare Vectori Si Matrice
    ATP Fisiere Binare Vectori Si Matrice
    Document15 pagini
    ATP Fisiere Binare Vectori Si Matrice
    Rox Ana Ellix
    Încă nu există evaluări
  • Proiect Stiva Si Coada
    Proiect Stiva Si Coada
    Document6 pagini
    Proiect Stiva Si Coada
    Maria Cornelia Prodan
    Încă nu există evaluări
  • PCD Lab3 Grosu Maxim RM-201
    PCD Lab3 Grosu Maxim RM-201
    Document7 pagini
    PCD Lab3 Grosu Maxim RM-201
    maxlab
    Încă nu există evaluări
  • Python - Curs 4
    Python - Curs 4
    Document19 pagini
    Python - Curs 4
    Dana Sutan
    100% (1)
  • Tratarea Excepțiilor În C#
    Tratarea Excepțiilor În C#
    Document19 pagini
    Tratarea Excepțiilor În C#
    Ariadna Ciupercă
    Încă nu există evaluări
  • Seminar 2 2022
    Seminar 2 2022
    Document3 pagini
    Seminar 2 2022
    MisterTony112
    Încă nu există evaluări
  • Java IE4
    Java IE4
    Document33 pagini
    Java IE4
    Cezar Barbu
    Încă nu există evaluări
  • Lab 1
    Lab 1
    Document10 pagini
    Lab 1
    rosca9doinita
    Încă nu există evaluări
  • CursJava 04 CristianIonita IO
    CursJava 04 CristianIonita IO
    Document12 pagini
    CursJava 04 CristianIonita IO
    Aysel-Ioana BATCOVEANU
    Încă nu există evaluări
  • 4 in AutoCAD
    4 in AutoCAD
    Document17 pagini
    4 in AutoCAD
    Gabi Sorin Sima
    Încă nu există evaluări
  • Motorul Electric
    Motorul Electric
    Document15 pagini
    Motorul Electric
    Voiculescu Claudia
    Încă nu există evaluări
  • 5 in AutoCAD
    5 in AutoCAD
    Document13 pagini
    5 in AutoCAD
    Gabi Sorin Sima
    Încă nu există evaluări
  • Fizica 1
    Fizica 1
    Document19 pagini
    Fizica 1
    Gabi Sorin Sima
    Încă nu există evaluări
  • 6 in AutoCAD
    6 in AutoCAD
    Document9 pagini
    6 in AutoCAD
    Gabi Sorin Sima
    Încă nu există evaluări
  • Fizica 2
    Fizica 2
    Document19 pagini
    Fizica 2
    Gabi Sorin Sima
    Încă nu există evaluări
  • Excel 2
    Excel 2
    Document16 pagini
    Excel 2
    danielapisoias
    Încă nu există evaluări
  • 1 in AutoCAD
    1 in AutoCAD
    Document12 pagini
    1 in AutoCAD
    Gabi Sorin Sima
    Încă nu există evaluări
  • 3 in AutoCAD
    3 in AutoCAD
    Document10 pagini
    3 in AutoCAD
    Gabi Sorin Sima
    Încă nu există evaluări
  • Excel 3
    Excel 3
    Document38 pagini
    Excel 3
    danielapisoias
    Încă nu există evaluări
  • Excel6 Pivoti
    Excel6 Pivoti
    Document33 pagini
    Excel6 Pivoti
    danielapisoias
    Încă nu există evaluări
  • Curs 4 Java
    Curs 4 Java
    Document10 pagini
    Curs 4 Java
    Valentin
    Încă nu există evaluări
  • Cap 2 in AutoCAD
    Cap 2 in AutoCAD
    Document10 pagini
    Cap 2 in AutoCAD
    Bogdan Alexandru Militaru
    Încă nu există evaluări
  • Excel5-Baze de Date
    Excel5-Baze de Date
    Document21 pagini
    Excel5-Baze de Date
    c_florel
    Încă nu există evaluări
  • Curs 8 Java
    Curs 8 Java
    Document14 pagini
    Curs 8 Java
    Valentin
    Încă nu există evaluări
  • Excel1-Operatii de Baza in Foaia de Calcul
    Excel1-Operatii de Baza in Foaia de Calcul
    Document18 pagini
    Excel1-Operatii de Baza in Foaia de Calcul
    danielapisoias
    100% (1)
  • Excel 3
    Excel 3
    Document38 pagini
    Excel 3
    danielapisoias
    Încă nu există evaluări
  • Tehnoredactare 1
    Tehnoredactare 1
    Document3 pagini
    Tehnoredactare 1
    Anonymous sdOw9nqT
    Încă nu există evaluări
  • Lab2 1
    Lab2 1
    Document5 pagini
    Lab2 1
    ambra17
    Încă nu există evaluări
  • Lab2 1
    Lab2 1
    Document5 pagini
    Lab2 1
    ambra17
    Încă nu există evaluări
  • Curs 7 Java
    Curs 7 Java
    Document12 pagini
    Curs 7 Java
    Valentin
    Încă nu există evaluări
  • Curs 9 Java
    Curs 9 Java
    Document13 pagini
    Curs 9 Java
    Valentin
    Încă nu există evaluări
  • Curs 6 Java
    Curs 6 Java
    Document11 pagini
    Curs 6 Java
    Valentin
    Încă nu există evaluări
  • Excel 0
    Excel 0
    Document14 pagini
    Excel 0
    danielapisoias
    Încă nu există evaluări
  • Curs 10 Java
    Curs 10 Java
    Document15 pagini
    Curs 10 Java
    Valentin
    Încă nu există evaluări
  • Curs 5 Java
    Curs 5 Java
    Document9 pagini
    Curs 5 Java
    neaksu90
    Încă nu există evaluări
  • Curs 3 Java
    Curs 3 Java
    Document15 pagini
    Curs 3 Java
    Valentin
    Încă nu există evaluări
  • Cap 09
    Cap 09
    Document4 pagini
    Cap 09
    Bogdan Vasile
    Încă nu există evaluări
  • Curs 2 Java
    Curs 2 Java
    Document10 pagini
    Curs 2 Java
    Valentin
    Încă nu există evaluări
  • Comunicatii Internet Cuprins
    Comunicatii Internet Cuprins
    Document1 pagină
    Comunicatii Internet Cuprins
    Radu Paul Sorin
    Încă nu există evaluări