gpt4 book ai didi

java - java中ObjectInputStream中的IOException

转载 作者:行者123 更新时间:2023-12-01 23:46:22 26 4
gpt4 key购买 nike

我的代码有问题。当我在代码中使用 readObject 时,出现 IOException。整个程序工作正常,但是当我想使用 readObject 时,我得到了这个异常,这是我用于保存对象的代码:

        File f = new File("employees.obj");
ObjectOutputStream objOut = null;

try {

objOut = new ObjectOutputStream(new BufferedOutputStream(
new FileOutputStream(f)));
objOut.writeObject(newEmployee);
objOut.flush();

System.out.println("Object is serialized.");

} catch (FileNotFoundException e) {
System.out.println("File not found!");

} catch (IOException e) {
System.out.println("Failed!");

} finally {

if (objOut != null) {
try {

objOut.close();
} catch (IOException e) {
}
}
}

这是我用来恢复对象的代码:

    File f = new File("employees.obj");
ObjectInputStream objIn = null;
ArrayList<Employee> c = new ArrayList<Employee>();
try {
objIn = new ObjectInputStream(new BufferedInputStream(
new FileInputStream(f)));
while (objIn.readObject() != null) {
Person employee = (Person) objIn.readObject();
System.out.println("hello");
System.out.println(employee.toString());
}
System.out.println(c.toString());
return c;

} catch (FileNotFoundException e) {
System.out.println("1");
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
System.out.println("3");
} catch (ClassCastException e) {
System.out.println("4");
} finally {

if (objIn != null) {
try {
objIn.close();
} catch (IOException e) {
System.out.println("4");
}
}
}
return c;

以及控制台中的结果:

at java.io.ObjectInputStream$BlockDataInputStream.peekByte(ObjectInputStream.java:2553)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1296)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:350)
at org.bihe.DeSerializer.deSerializeEmployees(DeSerializer.java:20)
at org.bihe.Main.enterAsManager(Main.java:238)
at org.bihe.Main.menu(Main.java:92)
at org.bihe.Main.main(Main.java:50)

最佳答案

    while (objIn.readObject() != null) {

将反序列化一个对象(Person)。然后是下一行:

        Person employee = (Person) objIn.readObject();

尝试反序列化下一个对象。如果你位于文件末尾(EOF),那么它会抛出IOException

要解决此问题,请执行以下操作:

    Person employee;
while ((employee = (Person)objIn.readObject()) != null) {
System.out.println("hello");
System.out.println(employee.toString());
}

while 将 readObject() 与 null 进行比较,并将其分配给 employee

关于java - java中ObjectInputStream中的IOException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16994291/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com