luni, 15 februarie 2010

Java: Serializare

//Clasa care urmeaza a fi serializata

import java.util.*;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.io.*;

public class ClasaSpreSerializare implements Serializable{
private int campPrivat;
protected int campProtejat;
public int campPublic;
private static int campStatic;
protected transient int campTransient;
public ClasaSpreSerializare(){}
public ClasaSpreSerializare(int x,int y,int z, int a, int b){
campPrivat=x;
campProtejat=y;
campPublic=z;
campStatic=a;
campTransient=b;
}
public String toString(){
return "campPrivat: "+campPrivat+" campProtejat: "+campProtejat+" campPublic: "+campPublic+" campStatic: "+campStatic+" campTransient: "+campTransient;
}
public void writeObject(ObjectOutputStream obj)throws Exception{
obj.writeInt(campProtejat);
}
public void readObject(ObjectInputStream obj2)throws Exception{
campTransient=obj2.readInt();
}
}


//Clasa de test

import java.util.*;
import java.io.*;

public class TestClasa {
public static void main(String[] args){
ClasaSpreSerializare test1=new ClasaSpreSerializare(1,2,3,4,5);
System.out.println("Continutul obiectului inainte de serializare: "+test1.toString());

try{
ObjectOutputStream obj=new ObjectOutputStream(new FileOutputStream("fis.txt"));
obj.writeObject(test1);
test1.writeObject(obj);
obj.close();
}catch(Exception ex){
System.out.println("Eroare la scriere!!!");
}

try{
ObjectInputStream obj=new ObjectInputStream(new FileInputStream("fis.txt"));
ClasaSpreSerializare test2=(ClasaSpreSerializare)obj.readObject();
test2.readObject(obj);
System.out.println("Obiectul dupa deserializare: "+test2.toString());
}catch(Exception ex){
System.out.println("Eroare la citire");
}
}
}


/**Metode de serializare:
1. Extinderea unei clasa serializabile
2. Implementare Serializable
3. Metode de serializare obisnuite(vezi writeObject(ObjectOutputStream obj) din exemplu; (se poate folosi pt transmiterea unor campuri, de ex transient)
4. Implementare Externalizable(tot o interfata marker), asemanator cu metoda descrisa mai sus la 3., folosesc flux pe Object
5. Declarare interfata si metode aferente(cel mai general), metodele folosesc fluxuri DataOutputStream
Vezi: Java de la 0 la expert
*/

Niciun comentariu:

Trimiteți un comentariu