StreamCorruptedException при Сериализации

180
12 декабря 2017, 19:06

Есть класс(Example) который реализует интерфейс Serializable

Есть file - он пустой

Есть такой код

ObjectInputStream inputStream = inputStream = new ObjectInputStream(new FileInputStream(file));
(Example) inputStream.readObject());

Так вот: если в классе Example я определяю только метод equals, то при чтении он выкидывает EOFExeption и я определяю что файл пуст, если в классе я реализовываю и equals, и hashCode то он мне выкидывает ошибку StreamCorruptedException. Файл в дальнейшем будет заполнен данными, но смысл в том, что с 2 методами он выкидывает непонятную мне ошибку, я ее не знаю как исправить.

Answer 1

На самом деле в вопросе не хватает минимально воспроизводимого примера.

Если посмотреть в документацию по исключениям:

public class EOFException

Signals that an end of file or end of stream has been reached unexpectedly during input.

EOFException - сигнализирует о внезапно закончившемся потоке для чтения

public class StreamCorruptedException

Thrown when control information that was read from an object stream violates internal consistency checks.

StreamCorruptedException - выбрасывается когда прочитанная информация не соответствует ожиданиям (вольный перевод)

Т.е. если читающий поток ожидает системную информацию и за ней данные об объекте, а получает что-то другое

Ждет:

системная информация -> данные объекта 1 -> данные объекта 2 ...

Получает:

системная информация -> данные объекта 1 -> системная информация...

На пустом файле у меня всегда выбрасывался EOFException в не зависимости от наличия hashCode или equals

READ ALSO
Настройка log4j2 для потоков

Настройка log4j2 для потоков

Есть класс Test, потомок ThreadКак мне настроить log4j2 что бы для каждого потока Test создавался свой лог файл

229
Как правильно передать координаты в Google Maps?

Как правильно передать координаты в Google Maps?

Пытаюсь геокодировать адрес переменной adr в координаты с долготой и шириной и отобразить метку на картеЗапускаю приложение

248
как инициализировать 5-ти мерный массив?

как инициализировать 5-ти мерный массив?

Привет! Есть простой массив Object[] arr = new int[50] заполненный некими значениями, также есть другой массив Object[][][][][] fiveDArr, правда он 5-ти мерный, нужно...

260
Чем отличается List от ArrayList?

Чем отличается List от ArrayList?

Чем отличается List от ArrayListПогуглил, но толком ничего не нашел (как минимум, на русском языке)

277