JAVA objectinputstream 无法退出循环
JAVA objectinputstream cant drop out from the loop
这是我的代码:
ObjectInputStream ois = null;
UserRegistration UR = new UserRegistration();
Scanner pause = new Scanner(System.in);
Admin go = new Admin();
try {
//ItemEntry book = new ItemEntry();
ois = new ObjectInputStream(new FileInputStream("Account.txt"));
while ((UR = (UserRegistration) ois.readObject()) != null) {
//if (book.getName().equals("1"))
{
System.out.println(UR);
}
}
} catch (EOFException e) {
System.out.println("\nEnd**");
}catch (ClassNotFoundException ex) {
System.out.println(ex.getMessage());
} catch (IOException e) {
System.out.println(e.getMessage());
} finally {
try {
ois.close();
System.out.println("Press \"ENTER\" to continue...");
pause.nextLine();
go.startup();
} catch (Exception ex) {
System.out.println(ex.getMessage());
}
}
}
如何让它退出循环而不是在到达最后一个对象时直接进入EOFException?请帮忙!
这是这个问题的重复:
Java FileInputStream ObjectInputStream reaches end of file EOF
底线是 ObjectInputStream 在到达流末尾时不会 return null。相反,底层 FileInputStream 抛出 EOFException。虽然您可以将其解释为文件结尾,但它不允许您区分截断的文件。所以,实际上,ObjectInputStream 希望您知道您将读入多少个对象。
要解决此问题,您可以在文件开头写入 一个整数,指示文件中有多少个 UserRegistration 对象。读取该值,然后使用 for 循环读取那么多对象。
或者,您可以将 UserRegistration 对象序列化为数组或其他容器,然后反序列化整个 array/container。
这是我的代码:
ObjectInputStream ois = null;
UserRegistration UR = new UserRegistration();
Scanner pause = new Scanner(System.in);
Admin go = new Admin();
try {
//ItemEntry book = new ItemEntry();
ois = new ObjectInputStream(new FileInputStream("Account.txt"));
while ((UR = (UserRegistration) ois.readObject()) != null) {
//if (book.getName().equals("1"))
{
System.out.println(UR);
}
}
} catch (EOFException e) {
System.out.println("\nEnd**");
}catch (ClassNotFoundException ex) {
System.out.println(ex.getMessage());
} catch (IOException e) {
System.out.println(e.getMessage());
} finally {
try {
ois.close();
System.out.println("Press \"ENTER\" to continue...");
pause.nextLine();
go.startup();
} catch (Exception ex) {
System.out.println(ex.getMessage());
}
}
}
如何让它退出循环而不是在到达最后一个对象时直接进入EOFException?请帮忙!
这是这个问题的重复:
Java FileInputStream ObjectInputStream reaches end of file EOF
底线是 ObjectInputStream 在到达流末尾时不会 return null。相反,底层 FileInputStream 抛出 EOFException。虽然您可以将其解释为文件结尾,但它不允许您区分截断的文件。所以,实际上,ObjectInputStream 希望您知道您将读入多少个对象。
要解决此问题,您可以在文件开头写入 一个整数,指示文件中有多少个 UserRegistration 对象。读取该值,然后使用 for 循环读取那么多对象。
或者,您可以将 UserRegistration 对象序列化为数组或其他容器,然后反序列化整个 array/container。