我从来没有使用过序列化。我认为除了我的“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