我对编程完全不熟悉,所以我很难解决自己的错误。有人建议我在这个网站上试一试,所以我想为什么不试一试。
我发现的有关此错误的其他帖子似乎并不相关:大多数人都建议关闭输入流,但我的代码已经这样做了。
我想要它做什么:将名为“photo”的Photo对象写入名为“test.ser”的文件中。然后读取文件“test.ser”并将“test.ser”中对象(“photo”)的路径返回给我。
它实际上做了什么:将名为“photo”的Photo对象写入“test.ser”。读取“test.ser”,返回EOFException并且没有路径。
返回路径实际上并不是非常重要,只要它为我返回一些有价值的东西。但是当我使用“System.out.println(photo)”或“photo.getId()”时,我收到同样的错误。
我不太确定我需要在这里粘贴什么,所以我将发布用于序列化和反序列化对象的两个try / catch-es:
序列化对象:
File test = new File("path.../something.ser");
Photo photo = new Photo(2, "..\\images\\2.jpg", getImage("..\\images\\2.jpg"));
try {
FileOutputStream fos = new FileOutputStream(test);
ObjectOutputStream out = new ObjectOutputStream(fos);
if (!test.exists()) {
test.createNewFile();
}
out.writeObject(photo);
out.close();
} catch (IOException e) {
e.printStackTrace();
}
反序列化对象:
try {
FileInputStream fis = new FileInputStream(test);
ObjectInputStream in = new ObjectInputStream(fis);
in.readObject();
photo = (Photo)in.readObject();
photo.getPath();
in.close();
} catch (Exception e) {
e.printStackTrace();
}
错误:
run:
null
java.io.EOFException
at java.io.ObjectInputStream$BlockDataInputStream.peekByte(ObjectInputStream.java:2571)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1315)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:369)
at view.Main.<init>(Main.java:103)
//103 is the line that casts the input object to a Photo object.
BUILD SUCCESSFUL (total time: 1 second)
当我尝试将对象(通过方法readObject接收)转换为“photo”类对象时,发生错误时发生错误。至少,这就是103行的错误所指的。
我在别处读到错误意味着我“试图读取比实际存在更多的对象”。不知道这意味着什么,因为我只是想让它读取1个图像 - 它应该在对象中 - 并返回它的位置。
此外,我读到ObjectInputStream永远不会返回null,除非我在某处给出了该值。但实际上它返回(?)“null”,即使我的代码不包含空值......
我已经好几天了(是的,我只是那么糟糕),但仍然没有运气。
答案 0 :(得分:4)
你读了两遍:
in.readObject();
photo = (Photo)in.readObject();
删除第一行。 您也不必创建该文件。输出流将为您完成。