Лучший возможный путь для завершения цикла можно сделать, добавив нулевой объект в конец. При чтении нулевого объекта можно использовать в качестве граничного условия для выхода из цикла. Захват EOFException также решает цель, но требуется несколько m