2013-11-27 3 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(); 

Но теперь я получаю SuppressWarnings unchecked от Eclipse, и я должен проверить исключение ClassNotFoundException. Почему это и как я могу это предотвратить?

ответ

5

Сериализация может использоваться для передачи объектов в другие приложения. Вполне возможно, что сериализованный класс отсутствует в приложении, которое читает объект. Поскольку ObjectOutputStream хранит содержимое полей, а не код, приложения чтения должны иметь фактический код для написанных классов. Если его нет, генерируется исключение ClassNotFoundException.

Что касается непроверенного типа: сначала прочитайте его в экземпляр объекта, а затем используйте оператор «instanceof», чтобы проверить, действительно ли он имеет тип MyList. См. Также здесь для общей части: How to avoid unchecked cast warnings with Java Generics

+0

Предупреждение о непроверенном типе состоит в том, что 'MyList' использует generics,' MyList 'не вызывают предупреждения. –

Смежные вопросы