Diferență între revizuiri ale paginii „Serializarea obiectelor”
Linia 2: | Linia 2: | ||
''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 java.io.Serializable]: | + | <div class="regula"><font color="#ff0000">Regulă:</font> 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]: |
+ | </div> | ||
+ | |||
+ | |||
<syntaxhighlight lang="java"> | <syntaxhighlight lang="java"> | ||
public class Question implements Serializable{ | public class Question implements Serializable{ |
Versiunea de la data 23 august 2012 11:39
Î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().
public class Question implements Serializable{
public String questionBody;
public String[] answers;
public 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 = getSomeOutputStream();
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(){
//...
}
}