从文件中读取对象

时间:2013-11-27 00:36:27

标签: java file fileinputstream fileoutputstream

我可以使用以下代码将列表写入文件:

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。为什么这样,我该如何防止这种情况?

1 个答案:

答案 0 :(得分:5)

序列化可用于将对象传输到其他应用程序。序列化类可能不会出现在读取对象的应用程序中。由于ObjectOutputStream只存储字段的内容而不存储代码,因此读取应用程序需要具有写入类的实际代码。如果它不存在,则抛出ClassNotFoundException。

对于未选中的类型:首先尝试将其读入Object实例,然后使用&#34; instanceof&#34;运算符以检查它是否实际上是MyList类型。另请参见此处的通用部分:How to avoid unchecked cast warnings with Java Generics