Socket InputStream на сервере подключен к двум различным входам, ObjectInputStream
и BufferedReader
. InputStreams
не предназначены для использования таким образом, и это может вызвать много проблем. BufferedReaders, по своей природе, будет собирать больше данных с InputStream
, чем вы на самом деле читаете. Если случится так, что они буферизуют данные, составляющие объект, то ваша последующая попытка прочитать объект с ObjectInputStream
заблокирует, потому что данные уже удалены.
Вам нужно выбрать один или другой метод для чтения данных. Если вам нужно иметь возможность читать как строки, так и объекты с сокета, вам придется перейти в байтово-ориентированный режим работы, где вы считываете байты в байтовый массив, а затем обрабатываете байтовый массив самостоятельно, чтобы убедиться, что Вы не теряете никаких данных.
Редактировать на основе комментария @Dunes ниже
Кажется, вам лучше всего придерживаться ObjectInputStream
и использовать другие его методы, которые позволяют вам читать произвольные типы примитивов из потока. И, если вы не возражаете против устаревшего вызова, у него даже есть метод readLine
.