Сначала
Вы не можете добавлять какие-либо данные в файл, используя разные ObjectOutputStream
с.Вы можете прочитать эти вопросы StackOverflow Добавление к ObjectOutputStream & java.io.StreamCorruptedException: недопустимый код типа: AC , чтобы понять, почему вы не можете этого сделать.Но вкратце это потому, что каждый новый ObjectOutputStream
будет добавлять свой заголовок к файлу, который будет его повреждать.Поэтому вы должны использовать один экземпляр ObjectOutputStream
для записи всех ваших объектов в файл.
Во-вторых
Вы не можете сериализовать несколько объектов Customer
и десериализоватьони как один ArrayList<Customer>
объект.Потому что сериализованные данные разных объектов сильно отличаются.Каждые сериализованные данные содержат метаданные о сериализованном типе объекта, именах полей, типах полей и т. Д. Каким-то образом ObjectOutputStream
отмечает начало и конец каждого сериализованного объекта, а ObjectInputStream
используетчто маркеры, чтобы знать, как десериализовать объекты.Это означает, что если вы напишите 2 объекта в ObjectOutputStream
, ваш ObjectInputStream
будет читать эти 2 объекта отчетливо.
То есть , если вы хотите сериализовать несколько объектов Customer
изатем десериализовать их как один ArrayList<Customer>
, затем вы должны реализовать свою собственную логику сериализации / десериализации.
В качестве альтернативы вы можете добавить новый Customer
к ArrayList
, а затем стереть все содержимое файла и выделить ArrayList
в этот файл, но это приведет к проблемам с производительностью.