Serializzazione in java

  • Creatore Discussione Creatore Discussione conpic
  • Data di inizio Data di inizio
Stato
Chiusa ad ulteriori risposte.

conpic

Nuovo Utente
8 Feb 2021
1
0
1
Salve a tutti. Ho un problema di serializzazione su un file con estensione .dat. Ho generato due semplici file: uno scrivianag.java con la classe anag.java e un altro file leggianag.java che legge i dati scritti dal primo. scrivianag.java è il seguente:
import java.io.*;
/*
Memorizza cognome e nome in un file serializzato
*/
public class scrivianag {

public static void main(String[] args) {

//impostazione dello standard di input
InputStreamReader in = new InputStreamReader(System.in);
BufferedReader tastiera = new BufferedReader(in);

String wcogn,wnome;
String risp="s";
//dichiarazione oggetto
anag oanag;

try{
//definizione stream e apertura del file anag.dat
FileOutputStream w=new FileOutputStream("anag.dat",true);
//definizione stream per l'utilizzo dei metodi per la scrittura
ObjectOutputStream fw=new ObjectOutputStream(w);
while (risp.equals("s"
;)
){

System.out.print("Cognome "
;)
;
wcogn=tastiera.readLine();
System.out.print("Nome "
;)
;
wnome=tastiera.readLine();

//creazione istanza dell'oggetto (memorizzazione dati
//nell'oggetto
oanag=new anag(wcogn,wnome);

//scrittura dell'oggetto nel file fr
fw.writeObject(oanag);

System.out.println("Continui s/n ?"
;)
;
risp=tastiera.readLine();
}
fw.flush();
fw.close();

}
catch(Exception e){
System.out.println("Errore"+e.getMessage());
}
}
}
la classe anag.java è la seguente:
import java.io.*;
public class anag implements Serializable {

//elenco attributi
public String cogn;
public String nome;

//costruttore
public anag(String cogn,String nome){
this.cogn=cogn;
this.nome=nome;
}
}


leggi.java invece è il seguente:
import java.io.*;
/*
Memorizza cognome e nome in un file serializzato
*/
public class leggianag {

public static void main(String[] args) {

//impostazione dello standard di input
InputStreamReader in = new InputStreamReader(System.in);
BufferedReader tastiera = new BufferedReader(in);

String wcogn,wnome;
String risp="s";
//dichiarazione oggetto
anag oanag;


//********** lettura del file anag.dat
try{
FileInputStream r=new FileInputStream("anag.dat"
;)
;


while (true){
try{
ObjectInputStream fr=new ObjectInputStream(r);
oanag=(anag)fr.readObject();
System.out.println(oanag.cogn+" "+oanag.nome);

}
catch(EOFException e){
break;
}
}

r.close();
}
catch (Exception e){
System.out.println("Errore "+e.getMessage());
}
}

}


Se inserisco più coppie di nominativi sembra che siano memorizzate nel file. Quando leggo invece, legge solo la prima coppia e segnala il seguente errore:

ant -f H:\NETBEANS\leggianag -Dnb.internal.action.name=run run
init:
Deleting: H:\NETBEANS\leggianag\build\built-jar.properties
deps-jar:
Updating property file: H:\NETBEANS\leggianag\build\built-jar.properties
Compiling 1 source file to H:\NETBEANS\leggianag\build\classes
compile:
run:
congedo sergio
Errore invalid stream header: 7371007E
BUILD SUCCESSFUL (total time: 0 seconds)

Da quanto letto su internet sembra che java tra una memorizzazione e un'altra inserisca degli header , non riconosciuti in fase di lettura. Come posso risolvere il problema?. Grazie
 
Scrivi il codice usando gli appositi tag!

IMPORTANTE Leggi il regolamento prima di continuare sul forum


Grazie
 
Stato
Chiusa ad ulteriori risposte.

Discussioni simili