Deserializzazione

In informatica, nella programmazione orientata agli oggetti, deserializzare un oggetto significa ricostruirlo a partire dalla sua rappresentazione binaria ottenuta da un file o da un canale di rete.

Il processo inverso si chiama serializzazione e trasforma un oggetto nella sua rappresentazione binaria che, successivamente, può essere salvata su una memoria di massa o si può trasmettere su un canale di rete.

Non bisogna confondere la deserializzazione con una lettura di dati o parametri da un file o da un canale di rete per ottenere le proprietà da caricare in un oggetto.

Deserializzazione di un oggettoModifica

Procedura in visual basicModifica

Quando si deserializza un oggetto, il formato del trasporto determina se verrà creato un flusso o un oggetto file. Dopo avere determinato il formato del trasporto, è possibile chiamare il metodo Serialize o Deserialize, in base alle esigenze. Per deserializzare un oggetto

  1. Costruire un XmlSerializer utilizzando il tipo di oggetto da deserializzare.
  2. Chiamare il metodo Deserialize per produrre una replica dell'oggetto. Al momento della deserializzazione, è necessario eseguire il cast dell'oggetto restituito al tipo dell'originale, come illustrato nell'esempio seguente, in cui l'oggetto viene deserializzato in un file benché possa essere deserializzato in un flusso.
  Dim myObject As MySerializableClass
  ' Construct an instance of the XmlSerializer with the type
  ' of object that is being deserialized.
  Dim mySerializer As XmlSerializer = New      
  XmlSerializer(GetType(MySerializableClass))
  ' To read the file, create a FileStream.
  Dim myFileStream As FileStream = _
  New FileStream("myFileName.xml", FileMode.Open)
  ' Call the Deserialize method and cast to the object type.
  myObject = CType( _
  mySerializer.Deserialize(myFileStream), MySerializableClass)

Procedura in C#Modifica

  MySerializableClass myObject;
  // Construct an instance of the XmlSerializer with the type
  // of object that is being deserialized.
  XmlSerializer mySerializer = 
  new XmlSerializer(typeof(MySerializableClass));
  // To read the file, create a FileStream.
  FileStream myFileStream = 
  new FileStream("myFileName.xml", FileMode.Open);
  // Call the Deserialize method and cast to the object type.
  myObject = (MySerializableClass) 
  mySerializer.Deserialize(myFileStream)

Procedura in JavaModifica

Di seguito un esempio di classe Java che carica un oggetto Vector da un file e, nel caso il file non esista, lo crea.

 import java.io.*;
 import java.util.*;
 
 public class Serialize {
    
    /**
     * @param obj '''''Object''''' - L'oggetto da salvare.
     * @param filename '''''String''''' - Il file dove salvarlo.
     */
    public static void serializza(Object daSerializzare, String filename) throws IOException {
        ObjectOutputStream objstream = new ObjectOutputStream(new FileOutputStream(filename));
        objstream.writeObject(daSerializzare);
        objstream.close();
    }
    
    /**
     * @param filename '''''String''''' - Il nome del file che contiene l'oggetto serializzato
     */
    public static Object deserializza(String filename) throws Exception {
        ObjectInputStream objstream = new ObjectInputStream(new FileInputStream(filename));
        Object oggettoDeserializzato = objstream.readObject();
        objstream.close();
        return oggettoDeserializzato;
    }
    
    /**
     * @param args '''''String[]''''' - gli argomenti della riga di comando
     */
    public static void main(String[] args) {
        Vector v;
        try {
            v = (Vector) deserializza("Amici.ser"); //cerca di caricare un Vector dal file Amici.ser
            System.out.println("Ho letto: "+v);
        } catch(Exception e) {
            //Nel caso non riesco a leggere il file, allora provo a crearlo
            System.out.println("File non trovato. Creazione in corso.");
            v = new Vector();
            v.addElement("Pietro");
            v.addElement("Giovanni");
            v.addElement("Matteo");
            System.out.println("Ho creato: "+v);
        }
        
        try {
            serializza(v, "Amici.ser"); //Serializza il Vector nel file Amici.ser
            System.out.println("Ho salvato: "+v);
        } catch(Exception e) {
            System.out.print("Errore nel salvataggio del file: ");
            e.printStackTrace();
        }
    }
 }
  Portale Informatica: accedi alle voci di Wikipedia che trattano di informatica