Non ho mai usato la serializzazione prima. Penso di aver tutto bene tranne l'ultima parte nel mio case-switch "Q".Serializzare una HashTable, Java
public class Test{
public static void main(String args[]){
Store store = new Store();
FileOutputStream fos;
ObjectOutputStream oos = null;
try{
fos = new FileOutputStream(new File("table.obj"));
oos = new ObjectOutputStream(fos);
}catch(IOException e1){
e1.printStackTrace();
}
Questo va avanti per contenere un po 'di più codice, ma quello che penso che è veramente importante è il mio caso "Q" ...
case "Q":
System.out.println("Good-Bye!");
try{
oos.writeObject(store);
oos.flush();
oos.close();
}catch(IOException e){
e.printStackTrace();
}
System.exit(0);
break;
Quando si tenta di salvare tutti i dati al mio obj file e chiudere i flussi e uscire il mio programma ho tutti questi errori ...
java.io.NotSerializableException: Oggetto a java.io.ObjectOutputStream.writeObject0 (fonte sconosciuta) a java.io. ObjectOutputStream.wri teObject (fonte sconosciuta) a java.util.Hashtable.writeObject (fonte sconosciuta) a sun.reflect.NativeMethodAccessorImpl.invoke0 (metodo natale) a sun.reflect.NativeMethodAccessorImpl.invoke (fonte sconosciuta) a sun.reflect. DelegatingMethodAccessorImpl.invoke (fonte sconosciuta) a java.lang.reflect.Method.invoke (fonte sconosciuta) a java.io.ObjectStreamClass.invokeWriteObject (fonte sconosciuta) a java.io.ObjectOutputStream.writeSerialData (fonte sconosciuta) a java.io.ObjectOutputStream.writeOrdinaryObject (sorgente sconosciuta) in java.io.ObjectOutputStream.writeObject0 (sorgente sconosciuta) in java.io.ObjectOutputStream.defaultWriteFields (sorgente sconosciuta) in java.io.ObjectOutputStream.writeSerialData (fonte sconosciuta) a java.io.ObjectOutputStream.writeOrdinaryObject (fonte sconosciuta) a java.io.ObjectOutputStream.writeObject0 (fonte sconosciuta) a java.io.ObjectOutputStream.writeObject (fonte sconosciuta) su Test.main (Test.java:143)
Non sono sicuro di cosa significhi la maggior parte di questi errori o perché li sto ricevendo o persino come risolverli. Qualcuno può aiutarmi?
EDIT: NEGOZIO CLASS
import java.io.Serializable;
import java.util.Hashtable;
public class Store implements Serializable{
Hashtable<String, Item> stockedItems = new Hashtable<String, Item>();
public boolean addItem(String code){
if(stockedItems.containsKey(code)){
stockedItems.get(code).incrementQuantity();
return true;
}
return false;
}
public boolean removeItem(String code){
if(stockedItems.containsKey(code)){
stockedItems.get(code).decrementQuantity();
return true;
}
return false;
}
public boolean findItem(String code){
if(stockedItems.containsKey(code)){
return true;
}
return false;
}
}
** Il mio HashTable detiene oggetti oggetto che non implementano Serializable. Che ora ho risolto. Il programma funziona e il caso Q funziona bene! Ora è il mio caso U che non funziona e qui è ...
case "U":
try{
FileInputStream fis = new FileInputStream("table.obj");
ObjectInputStream ois = new ObjectInputStream(fis);
store = (Store)ois.readObject();
ois.close();
}catch(IOException | ClassNotFoundException e){
e.printStackTrace();
}
break;
Lo scopo di questo caso è quello di permettere all'utente di scegliere se o non vogliono usare i dati memorizzati nel mio obj file o no. Ottengo questi errori durante il tentativo di utilizzare quel caso
a java.io.ObjectInputStream $ BlockDataInputStream.peekByte (fonte sconosciuta) a java.io.ObjectInputStream.readObject0 (fonte sconosciuta) a java.io.ObjectInputStream. readObject (fonte sconosciuta) a Test.main (Test.java:142)
Puoi pubblicare la classe Store? La mia ipotesi è che non è contrassegnato come serializzabile o qualcosa all'interno non è serializzabile. – hd1
Gli oggetti che stai tentando di memorizzare, serializzabili? –
'NotSerializableException' significa che stai tentando di serializzare qualcosa che non è serializzabile. Mostra la tua classe 'Store' ... – jlordo