Android:ObjectInputStream在读取arraylist时抛出ClassCastException

时间:2015-04-28 11:41:15

标签: android arraylist classcastexception objectinputstream

我有一个实现可序列化的某个POJO对象的arraylist。当我将对象写入磁盘时,我这样做:

File outputDir = context.getCacheDir();
File outputFile = new File(outputDir,  getCacheKey() );
ObjectOutputStream oos = new ObjectOutputStream(new BufferedOutputStream(new FileOutputStream(outputFile)));
oos.writeObject(arraylistOfMyObjects);
oos.close();

当我后来想把这个列表读回到对象的arraylist中时,我这样做:

File outputDir = context.getCacheDir();
File outputFile = new File(outputDir,  getCacheKey() );
ObjectInputStream ois = new ObjectInputStream(new BufferedInputStream(new FileInputStream(outputFile)));
final ArrayList<myObject> list = (ArrayList<myObject>) ois.readObject();
ois.close();

我在将输入流转换为arraylist的行上经常收到异常,错误如下所示:

java.lang.ClassCastException: java.util.ArrayList cannot be cast to java.io.ObjectStreamClass

为什么会出现这些错误?如何更改我的代码以解决它们?

有趣的是,每次运行应用程序时都不会出现错误,但只是出于任何奇怪的原因而不时出现错误。

1 个答案:

答案 0 :(得分:0)

确保您每次都以相同的顺序写回和阅读对象。在我的情况下,我意识到我正在使用可选参数写入文件:

if(cacheAllItems) { // <-- BREAKS READING FILE WHEN FALSE
   objectOutputStream.writeObject(itemsList);
   objectOutputStream.writeObject(itemNamesList);
}
objectOutputStream.writeObject(currentItem);

然后我试图用:

读取文件
itemsList = (ArrayList<Item>) objectInputStream.readObject(); // MIGHT NOT EXIST
itemNames = (ArrayList<String>) objectInputStream.readObject(); // MIGHT NOT EXIST
currentItem = (Item) objectInputStream.readObject();

因此,如果我上次使用cacheItems() = true运行我的cacheAllItems函数,则一切正常,但如果上次运行只保存currentItem,则readObject()试图将一个对象读作应该首先出现的列表。