Что происходит с вашим кодом:
- вы записываете список в файл, с двумя записями
- вы сбрасываете поток
- вы пишете список снова, с тремя записями
Таким образом, ваш файл содержит два значения, да.Два списка, один с двумя, один с тремя записями.
Другими словами: reset()
не сброс того, что было записано в файл!Вы написали один список с двумя записями.Вы только сбрасываете информацию о сохраненных объектах, так что emp1 и emp2 полностью снова сериализуют .Без вызова сброса JVM поймет, что ему не нужно снова полностью сериализовать emp1 и emp2.
Значение: по умолчанию JVM сжимает объем передаваемых данных.Он запоминает, какие объекты уже были записаны, и вместо того, чтобы записывать их неоднократно, он только записывает что-то вроде «объект X, который был сериализован ранее, снова возвращается» в поток.
Итак: я думаю, вы просто не понимаете смысл метода reset()
.Решение: прочитайте небольшой учебник, такой как tutorialspoint .
Редактировать, учитывая последний комментарий ОП:
То, что вы просите, невозможно в этомпуть.Вы пишете список объектов.Это означает, что все записи этого списка в этот момент записываются в файл.JVM запоминает «этот список уже был написан», поэтому не запишет его снова, даже если его внутреннее состояние за это время изменилось.