Nigdy wcześniej nie używałam Serializacji. Myślę, że wszystko jest w porządku, z wyjątkiem ostatniej części w moim przełączniku przypadków "Q".Serializing a 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();
}
Trwa to zawiera kilka więcej kodu, ale co uważam za bardzo ważne jest mój „Q” przypadek ...
case "Q":
System.out.println("Good-Bye!");
try{
oos.writeObject(store);
oos.flush();
oos.close();
}catch(IOException e){
e.printStackTrace();
}
System.exit(0);
break;
Gdy próbuję zapisać wszystkich danych do mojego Obj plik i zamknąć strumienie i opuścić mój program mam wszystkie te błędy ...
java.io.NotSerializableException: Pozycja na java.io.ObjectOutputStream.writeObject0 (Unknown Source) na java.io. ObjectOutputStream.wri teObject (Unknown Source) na java.util.Hashtable.writeObject (Unknown Source) w sun.reflect.NativeMethodAccessorImpl.invoke0 (metoda podstawowa) w sun.reflect.NativeMethodAccessorImpl.invoke (Unknown Source) w sun.reflect. DelegatingMethodAccessorImpl.invoke (Unknown Source) na java.lang.reflect.Method.invoke (Unknown Source) w java.io.ObjectStreamClass.invokeWriteObject (Unknown Source) w java.io.ObjectOutputStream.writeSerialData (Unknown Source) na java.io.ObjectOutputStream.writeOrdinaryObject (Nieznane źródło) w java.io.ObjectOutputStream.writeObject0 (Nieznane źródło) w java.io.ObjectOutputStream.defaultWriteFields (Unknown Source) at java.io.ObjectOutputStream.writeSerialData (Unknown Source) na java.io.ObjectOutputStream.writeOrdinaryObject (Unknown Source) na java.io.ObjectOutputStream.writeObject0 (Unknown Source) na java.io.ObjectOutputStream.writeObject (Unknown Source) w Test.main (Test.java:143)
Nie jestem pewien, co oznacza większość tych błędów i dlaczego je otrzymuję, a nawet jak je naprawić. Czy ktoś może mi pomóc?
EDIT: STORE 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;
}
}
** Mam HashTable posiada pozycji obiektów, które nie implementują Serializable. Które teraz naprawiłem. Przebieg programu i przypadek Q działa dobrze! Teraz to jest moja sprawa U, które nie działa, a tutaj jest ...
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;
Celem tym przypadku jest umożliwienie użytkownikowi wybrać, czy chcą korzystać z danych przechowywanych w moim .obj plik lub nie. Otrzymuję te błędy przy próbie użycia takim przypadku
na java.io.ObjectInputStream $ BlockDataInputStream.peekByte (Unknown Source) na java.io.ObjectInputStream.readObject0 (Unknown Source) na java.io.ObjectInputStream. readObject (Unknown Source) na Test.main (Test.java:142)
Czy możesz opublikować klasę Sklep? Domyślam się, że nie jest oznaczony jako możliwy do serializacji lub coś wewnątrz nie jest możliwe do serializacji. – hd1
Czy obiekty, które próbujesz zapisać, można poddać serializacji? –
'NotSerializableException' oznacza, że próbujesz serializować coś, czego nie można serializować. Pokaż swoją klasę 'Store' ... – jlordo