Serializzazione binaria

di il
1 risposte

Serializzazione binaria

SALVE A TUTTI CHIEDO APPROFONDIMENTO DEL SEGUENTE CODICE
questa è la classe principale chiamata persona che implementa SerializzazioneBinaria come interfaccia e che contiene metodi read e write(evidenziati) per scrivere su file binario e leggere da file binario:

public class Persona implements SerializzazioneTestuale,SerializzazioneBinaria {
public String nome;
public String cognome;
public String codice;
public int eta;

public Persona() {}

public Persona(String nome, String cognome,int eta,String codice) {

this.nome = nome;
this.cognome = cognome;
this.codice = codice;
this.eta = eta;
}
@Override
public void read(DataInputStream i) throws IOException {
// TODO Auto-generated method stub
nome = i.readUTF();
cognome = i.readUTF();
eta = i.readInt();
}

@Override
public void write(DataOutputStream o) throws IOException {
// TODO Auto-generated method stub
o.writeUTF(nome);
o.writeUTF(cognome);
o.writeInt(eta);
}

questa è la classe che rappresenta SerializzazioneBinaria :

public interface SerializzazioneBinaria {
public void read(DataInputStream i) throws IOException;
public void write(DataOutputStream o) throws IOException;

}

Questa infine è la classe main con il metodo main ed è qui la mia domanda di approfondimento come mai nella sezione gialla output è stato istanziato subito mentre nella sezione rossa input è stato dichiarato null e poi istanziato sarebbe stato uguale istanziare i due oggetti subito? :
public class Main {

public static void main(String[] args) throws IOException {

String text = "persona.txt";
String bin = "persona.dat";

Persona output = new Persona("Big","Jim",24,"Puzza");
Persona input = null;

DataOutputStream dos = null;
DataInputStream dis = null;

//scrittura su file binario
try {
dos = new DataOutputStream(new BufferedOutputStream(new FileOutputStream(bin)));
output.write(dos);
} catch (Exception ex) {
System.out.println("errore I/O");
}finally {
dos.close();
}
//lettura su file binario
try {
dis = new DataInputStream(new BufferedInputStream(new FileInputStream(bin)));
input = new Persona();
input.read(dis);
} catch (Exception ex) {
System.out.println("errore I/O");
}finally {
dis.close();
}
System.out.println(input);
System.out.println(output);

}


}

Ultima domanda se potete tradurmi letteralmente cio che fanno le seguenti istruzioni spiegando anche cosa contengono gli oggetti cosa viene passato dai metodi se sono gli stessi read e write di SerializzazioneBinaria che non ho capito nel dettaglio il codice come si comporta GRAZIE MILLE
output.write(dos);
input.read(dis);

1 Risposte

  • Re: Serializzazione binaria

    lorenzodev21 ha scritto:


    come mai nella sezione gialla output è stato istanziato subito mentre nella sezione rossa input è stato dichiarato null e poi istanziato sarebbe stato uguale istanziare i due oggetti subito?
    Sì, di per sé si poteva benissimo creare l'oggetto Persona all'inizio da assegnare subito a input. Non è una questione particolarmente importante questa, visto il livello "didattico" del codice.

    lorenzodev21 ha scritto:


    potete tradurmi letteralmente cio che fanno le seguenti istruzioni
    output.write(dos);
    input.read(dis);
    La prima istruzione chiede all'oggetto Persona di scrivere i suoi dati (ovvero di "serializzarsi") sul dos (DataOutputStream).
    La seconda chiede ad un altro oggetto Persona di ripristinare i dati (ovvero di "deserializzarsi") dal dis (DataInputStream).
Devi accedere o registrarti per scrivere nel forum
1 risposte