【发布时间】:2017-10-29 17:36:31
【问题描述】:
我正在尝试将自定义(可序列化)对象的 ArrayList 读/写到文件中。它按预期工作,除了一件事:我在读取文件时收到 EOFexception。这是我的代码:
class FileHandler {
private final String FILENAME = "storage.txt";
ArrayList<Plane> readFromFile(Context context) {
ArrayList<Plane> returnList = new ArrayList<>();
Plane temp;
try {
FileInputStream fileInputStream = context.openFileInput(FILENAME);
ObjectInputStream objectInStream = new ObjectInputStream(fileInputStream);
while ((temp = (Plane)objectInStream.readObject()) != null) {
returnList.add(temp);
}
objectInStream.close();
}
catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
return returnList;
}
void writeToFile(ArrayList<Plane> inData, Context context) {
FileOutputStream fileOutputStream;
ObjectOutputStream outputStream;
try {
fileOutputStream = context.openFileOutput(FILENAME, Context.MODE_PRIVATE);
outputStream = new ObjectOutputStream(fileOutputStream);
for (Plane p: inData) {
outputStream.writeObject(p);
}
outputStream.close();
fileOutputStream.close();
}
catch (IOException e) {
e.printStackTrace();
}
}
}
文件按预期写入和读取,但读取文件时出现 EOF 异常。不知道为什么。我认为我的 while 循环会确保不会发生这种情况?
- 为什么会出现此异常?
- 平面是可序列化的。如果我将 Plane 改为 parcable,是否可以读取和写入文件? (如何?)
【问题讨论】: