Как мне приятно прочитать неизвестное количество объектов из java.io.ObjectInputStream? - PullRequest
2 голосов
/ 04 апреля 2011

Я нашел эту страницу , которая предлагает цикл до тех пор, пока не будет выдано исключение, а затем обработает это исключение.

В основном это означает:

[...]
try {
    while (true) {
        objectInputStream.readObject();
    }
}
catch ( EOFException e ) {
    \\ This ALWAYS happens
}
[...]

Однако, как выразился Блох в Effective Java, нужно только «Использовать исключения для исключительных условий», и в действительности нет ничего исключительного в том, что входной поток, не содержащий бесконечного числа объектов, теперь существует? Это будет происходить каждый раз!

Так как в ObjectInputStream нет метода hasNext, что я могу сделать? Действительно ли я застрял в использовании исключения для того, чтобы знать, когда больше нет доступных для чтения объектов?

1 Ответ

9 голосов
/ 04 апреля 2011

Несколько способов сделать это, все они хороши, на мой взгляд:

  • используйте исключение. Разработчики API не включили метод, как вы сказали, для проверки, есть ли еще, так что это отчасти их вина

  • использовать маркерный объект при записи в поток. Например, Integer.MAX_VALUE или пользовательский объект EOFMarker. Если он найден, остановитесь.

  • Не пишите сами объекты, а вместо этого пишите List. Тогда читайте список

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...