从文件中读取对象

Cil*_*nco 2 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();
Run Code Online (Sandbox Code Playgroud)

现在我想从文件中读取列表,并尝试使用此代码:

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

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

list = (MyList<Integer>) reader.readObject();   
reader.close();
Run Code Online (Sandbox Code Playgroud)

但是现在我SuppressWarnings unchecked从Eclipse 获得了一个,我必须检查ClassNotFoundException.为什么这样,我该如何防止这种情况?

fpw*_*fpw 5

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

至于未经检查的类型:首先尝试将其读入Object实例,然后使用"instanceof"运算符检查它是否实际上是MyList类型.另请参见此处的通用部分:如何使用Java Generics避免未经检查的强制转换警告