2013-11-27 128 views
2

我可以寫一個清單文件與此代碼:閱讀對象

MyList<Integer> l = new MyList<Integer>(); 
//... 

FileOutputStream fos = new FileOutputStream(filename); 
ObjectOutputStream writer = new ObjectOutputStream(fos); 

writer.writeObject(l); 
writer.close(); 

現在我想從文件中讀取清單和我試圖用這個代碼:

MyList<Integer> list = new MyList<Integer>(); 
//... 

FileInputStream fis = new FileInputStream(filename); 
ObjectInputStream reader = new ObjectInputStream(fis); 

list = (MyList<Integer>) reader.readObject(); 
reader.close(); 

但是現在我從Eclipse獲得了一個SuppressWarnings unchecked,我必須檢查ClassNotFoundException。爲什麼是這樣的,我該如何防止這種情況?

回答

5

序列化可用於將對象傳輸到其他應用程序。序列化類可能不存在於讀取對象的應用程序中。由於ObjectOutputStream只存儲字段的內容而不是代碼,因此閱讀應用程序需要具有寫入類的實際代碼。如果它不存在,則拋出ClassNotFoundException。

至於未選中的類型:先嚐試將其讀入Object實例,然後使用「instanceof」運算符來檢查它是否實際上是MyList類型。另請參見此處的通用部分:How to avoid unchecked cast warnings with Java Generics

+0

有關未檢查類型的警告是因爲'MyList'正在使用泛型,'MyList '不會導致警告。 –