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.为什么这样,我该如何防止这种情况?
序列化可用于将对象传输到其他应用程序.序列化类可能不在读取对象的应用程序中.由于ObjectOutputStream只存储字段的内容而不存储代码,因此读取应用程序需要具有写入类的实际代码.如果它不存在,则抛出ClassNotFoundException.
至于未经检查的类型:首先尝试将其读入Object实例,然后使用"instanceof"运算符检查它是否实际上是MyList类型.另请参见此处的通用部分:如何使用Java Generics避免未经检查的强制转换警告