Я в настоящее время готовятся к оценке вакансий, которые у меня есть. Таким образом, компания предоставила некоторые практические задания и их соответствующие решения.Хотя условия для десериализации нескольких объектов в Java
Я столкнулся с некоторой дилеммой о том, как десериализовать несколько объектов из файла Serialized.
Первоначально, когда я решал самостоятельно, изучив определения классов для FileInputStream и ObjectInputStream, я решил, что лучший способ достичь этого будет.
FileInputStream fis = new FileInputStream(fileName);
ObjectInputStream ois = new ObjectInputStream(fis);
while(fis.available()!=0)
{
obj = (Show)ois.readObject();
lst.add(obj);
}
ois.close();
fis.close();
Но позже, когда я искал, я не нашел никого, предлагающего это, хотя это сработало отлично для меня. Решение этих компаний к уступке является
in=new ObjectInputStream(new FileInputStream(fileName));
Show s=null;
while((s=(Show)in.readObject())!=null){
list.add(s);
}
Но когда я пытаюсь использовать последнее решение в другой программе, это дает мне исключение
FileInputStream fis = new FileInputStream(fileNameChannel);
ObjectInputStream ois = new ObjectInputStream(fis);
while((obj=(Channel) ois.readObject())!=null){
list.add(obj);
}
fis.close();
ois.close();
Исключение:
java.io.EOFException
at java.io.ObjectInputStream$BlockDataInputStream.peekByte(Unknown Source)
at java.io.ObjectInputStream.readObject0(Unknown Source)
at java.io.ObjectInputStream.readObject(Unknown Source)
at com.psl.util.SetTopBoxManagementSystemImpl.populateByChannelCategory(SetTopBoxManagementSystemImpl.java:29)
at com.psl.main.Client.main(Client.java:18)
Чтобы найти правильный ответ, я попробовал поиск через StackExchange и нашел, что люди действительно предлагали в ловле exce ption и Обработка его в сочетании с использованием While (true). - Link
Что я не мог понять, как
- Почему я не должен использовать fis.available()> 0? или, вернее, почему никто?
- Каковы могут быть возможные причины того, что одна и та же реализация приводит к исключению EOFException в одной программе, но не в другом? Поскольку оба извлекают все сериализованные объекты, присутствующие в файле Serialized.
- Почему я должен использовать while (true) и ловлю EOFException, если это возможно для меня таким образом, чтобы исключение не происходило, пока все в порядке? Это просто похоже на ярлык для достижения. Если что-то пойдет не так (EOF wise), как бы мы справились с этим?
Возможно '' '' '' '' '' '' '' '' '' ', даже если мы еще не прочитали все нужные нам данные. Я думаю, что они могут писать нулевой объект, чтобы указать конец файла. – BevynQ