Я совершенно не знаком с программированием, поэтому у меня возникли трудности с решением моих собственных ошибок. Кто-то посоветовал мне попробовать его на этом веб-сайте, поэтому я подумал, почему бы не сделать это.ObjectInputStream.readObject() дает EOFException
Другие сообщения, которые я нашел относительно этой ошибки, не выглядели очень актуальными: большинство из них были людьми, которые советуют закрыть входной поток, но мой код уже делает это.
Что я хочу этого делать: Записать фото-объект под названием «фото» в файл под названием «test.ser». Затем прочитайте файл «test.ser» И верните путь к объекту («фото») в «test.ser» обратно ко мне.
Что он на самом деле делает: Записывает объект «с фотографией» под названием «test.ser». Читает «test.ser», возвращает исключение EOFException и никакого пути.
Возвращение пути на самом деле не очень важно, если оно возвращает мне что-то ценное. Но я получаю ту же ошибку, когда я использую «System.out.println (фото)» или «photo.getId()».
Я не очень уверен, что мне нужно, чтобы вставить здесь, так что я буду размещать два Try/Catch-эс, что я использую для сериализации и десериализации объекта:
Сериализация объекта:
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 - в объект класса «фото». По крайней мере, это то, на что ссылается ошибка в строке 103.
Я читал в другом месте, что ошибка означает, что я «пытался читать больше объектов, чем там есть». Не уверен, что это значит, потому что я просто хочу, чтобы он прочитал 1 изображение - которое должно быть внутри объекта - и вернет его местоположение.
Также я прочитал, что ObjectInputStream никогда не возвращает null, если только я не дал это значение где-то. Но на самом деле он возвращает (?) «Null», хотя мой код не содержит нулевого значения ...
Я был у него в течение нескольких дней (да, я просто так плохо) и все еще нет удачи.
Связано: [EOFException при чтении файлов с ObjectInputStream] (http://stackoverflow.com/q/12684072/1065197) –