Diferență între revizuiri ale paginii „Serializarea obiectelor”

De la WikiLabs
Jump to navigationJump to search
(Pagină nouă: În afară de fluxurile de I/O despre care s-a discutat în detaliu în capitolul de fluxuri, limbajul Java pune la dispoziția programatorilor o noțiune puternică de serializare a ...)
 
Linia 1: Linia 1:
În afară de fluxurile de I/O despre care s-a discutat în detaliu în capitolul de fluxuri, limbajul Java pune la dispoziția programatorilor o noțiune puternică de serializare a obiectelor. Știm deja că o clasă este o structură ce încapsulează date și funcționalitate. Serializarea este procedeul prin care datele încapsulate în instanța unei clase sunt trimise și primite cu ajutorul unui flux de I/O. Clasele care realizează acest lucru sunt [http://docs.oracle.com/javase/7/docs/api/java/io/ObjectOutputStream.html java.io.ObjectOutputStream] și [http://docs.oracle.com/javase/7/docs/api/java/io/ObjectInputStream.html ObjectInputStream] iar metodele cele mai utilizate sunt ''writeObject(Object)'' și  
+
În afară de fluxurile de I/O despre care s-a discutat în detaliu în capitolul de fluxuri, limbajul Java pune la dispoziția programatorilor o noțiune puternică de serializare a obiectelor. Știm deja că o clasă este o structură ce încapsulează date și funcționalitate. Serializarea este procedeul prin care datele încapsulate în instanța unei clase sunt trimise și primite cu ajutorul unui flux de I/O. Clasele care realizează acest lucru sunt [http://docs.oracle.com/javase/7/docs/api/java/io/ObjectOutputStream.html java.io.ObjectOutputStream] și [http://docs.oracle.com/javase/7/docs/api/java/io/ObjectInputStream.html java.io.ObjectInputStream] iar metodele cele mai utilizate sunt ''writeObject(Object)'' și  
 
''readObject()''.
 
''readObject()''.
  
Pentru ca o clasă să poate fi serializată (sau mai bine zis, pentru ca obiectele instanțe ale acelei clase să poată fi serializate), clasa trebuie să implementeze interfața [http://docs.oracle.com/javase/7/docs/api/java/io/Serializable.html Serializable]:
+
Pentru ca o clasă să poate fi serializată (sau mai bine zis, pentru ca obiectele instanțe ale acelei clase să poată fi serializate), clasa trebuie să implementeze interfața [http://docs.oracle.com/javase/7/docs/api/java/io/Serializable.html java.io.Serializable]:
 
<syntaxhighlight lang="java">
 
<syntaxhighlight lang="java">
 
public class Question implements Serializable{
 
public class Question implements Serializable{

Versiunea de la data 23 august 2012 11:37

În afară de fluxurile de I/O despre care s-a discutat în detaliu în capitolul de fluxuri, limbajul Java pune la dispoziția programatorilor o noțiune puternică de serializare a obiectelor. Știm deja că o clasă este o structură ce încapsulează date și funcționalitate. Serializarea este procedeul prin care datele încapsulate în instanța unei clase sunt trimise și primite cu ajutorul unui flux de I/O. Clasele care realizează acest lucru sunt java.io.ObjectOutputStream și java.io.ObjectInputStream iar metodele cele mai utilizate sunt writeObject(Object) și readObject().

Pentru ca o clasă să poate fi serializată (sau mai bine zis, pentru ca obiectele instanțe ale acelei clase să poată fi serializate), clasa trebuie să implementeze interfața java.io.Serializable:

public class Question implements Serializable{

    private String questionBody;
    private String[] answers;
    private int correctAnswerIndex;

}

Scrierea obiectelor

Un ObjectOutputStream este, ca și clasa FilterOutputStream, un "wrapper", adică o înfășurătoare care are nevoie de un alt OutputStream pentru a funcționa. Rolul clasei ObjectOutputStream este de a transforma un obiect într-un șir de octeți care se scriu mai departe pe stream-ul la nivel de octet:

public class ObjectWriter{

public static void main(String[] _args){
    try{
        OutputStream _byteStream = getSomeStream();
        ObjectOutputStream _objectStream = new ObjectOutputStream(_byteStream);
        Question _q1 = new Question();
        _objectStream.writeObject(_q1);
        _objectStream.close();
    }catch(IOException _ioe){
        System.out.println("Unable to write object: " + _ioe.getMessage());
    }
}

public static OutputStream getSomeOutputStream(){
    //...
}

}