我從來沒有使用過序列化。我認爲除了我的「Q」情況開關中的最後一部分之外,我已經擁有了它。序列化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(來源不明) 在java.io. ObjectOutputStream.wri teObject(來源不明) 在java.util.Hashtable.writeObject(來源不明) 在sun.reflect.NativeMethodAccessorImpl.invoke0(本機方法) 在sun.reflect.NativeMethodAccessorImpl.invoke(來源不明) 在sun.reflect。 DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at java.io.ObjectStreamClass.invokeWriteObject(Unknown Source) at java.io.ObjectOutputStream.writeSerialData(Unknown Source) at java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source) at java.io.ObjectOutputStream.writeObject0(Unknown Source) at java.io.ObjectOutputStream.defaultWriteFields(Unknown Source) at java.io.ObjectOutputStream.writeSerialData(Unknown Source) at java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source) at java.io.ObjectOutputStream.writeObject0(Unknown Source) at java.io.ObjectOutputStream.writeObject(Unknown Source) at Test.main(Test.java:143)我不確定這些錯誤中的大部分意味着什麼,或者我爲什麼要獲取它們,甚至是如何解決它們。誰能幫我?
編輯: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;
}
}
**我的HashTable持有不實現Serializable項目對象。我現在修好了。程序運行和Q case工作正常!現在,它是我的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(來源不明) 在java.io.ObjectInputStream.readObject0(來源不明) 在java.io.ObjectInputStream中得到這些錯誤。的readObject(來源不明) 在Test.main(Test.java:142)
你可以發佈Store類嗎?我的猜測是它沒有被標記爲可序列化或者其中的某些內容是不可序列化的。 – hd1 2013-04-23 18:14:41
您試圖存儲,可序列化的對象? – 2013-04-23 18:14:53
'NotSerializableException'意味着你正試圖序列化不可序列化的東西。顯示你的Store類# – jlordo 2013-04-23 18:15:46