Я никогда не использовал сериализацию раньше. Я думаю, что у меня все в порядке, кроме последней части моего «Q» case-switch.Сериализация 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();
}
Это продолжается, чтобы содержать кучу больше кода, но то, что я думаю, что это очень важно, это мой «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;
При попытке сохранить все данные на мой .obj файл и закрыть потоки и выйти из моей программы я получаю все эти ошибки ...
java.io.NotSerializableException: Деталь на java.io.ObjectOutputStream.writeObject0 (Unknown Source) в java.io. ObjectOutputStream.wri teObject (Unknown Source) в java.util.Hashtable.writeObject (Unknown Source) в sun.reflect.NativeMethodAccessorImpl.invoke0 (Native Method) в sun.reflect.NativeMethodAccessorImpl.invoke (Unknown Source) в sun.reflect. DelegatingMethodAccessorImpl.invoke (Unknown Source) в java.lang.reflect.Method.invoke (Unknown Source) в java.io.ObjectStreamClass.invokeWriteObject (Unknown Source) в java.io.ObjectOutputStream.writeSerialData (Unknown Source) в java.io.ObjectOutputStream.writeOrdinaryObject (Неизвестный источник) at java.io.ObjectOutputStream.writeObject0 (Неизвестный источник) at java.io.ObjectOutputStream.defaultWriteFields (Неизвестный источник) at java.io.ObjectOutputStream.writeSerialData (Unknown Source) в java.io.ObjectOutputStream.writeOrdinaryObject (Unknown Source) в java.io.ObjectOutputStream.writeObject0 (Unknown Source) в java.io.ObjectOutputStream.writeObject (Unknown Source) at Test.main (Test.java:143)
Я не уверен, что означает большинство этих ошибок или почему я их получаю или даже как их исправить. Может кто-нибудь мне помочь?
EDIT: STORE КЛАСС
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;
}
}
** Мой HashTable имеет Элемента Объекты, которые не реализуют Serializable. Который я теперь исправил. Запуск программы и работа Q отлично! Теперь это мой случай U, что не работает, и вот это ...
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;
Цель этого случай, чтобы позволить пользователю выбрать, хотят ли они использовать данные, хранящиеся в моем .obj файл или нет. Я получаю эти ошибки при попытке использовать тот случай
в java.io.ObjectInputStream $ BlockDataInputStream.peekByte (Unknown Source) в java.io.ObjectInputStream.readObject0 (Unknown Source) в java.io.ObjectInputStream. readObject (Unknown Source) на Test.main (Test.java:142)
Можете ли вы опубликовать класс Store? Я предполагаю, что он не помечен как сериализуемый или что-то внутри не сериализуется. – hd1
Являются ли объекты, которые вы пытаетесь сохранить, сериализуемыми? –
'NotSerializableException' означает, что вы пытаетесь сериализовать то, что не является сериализуемым. Покажите свой класс 'Store' ... – jlordo