Создать ObjectOutputStream перед ObjectInputStream Если вы пишете код, который передает данные в двух направлениях, используя ObjectInputStream и ObjectOutputStream, будьте осторожны, чтобы сначала создать ObjectOutputStream.
Если вы вместо этогосначала создайте ObjectInputStream, оба конца будут блокироваться и в конечном итоге потерпят неудачу в конструкторе.Это связано с тем, что конструктор входного потока ожидает поступления исходной строки байтов из объекта ObjectOutputStream open ().В однонаправленном случае, когда одна сторона пишет, а другая читает, все идет гладко.Однако в двунаправленном случае, если обе стороны пытаются сначала создать входной поток, обе ожидают, пока другая сторона создаст выходной поток, и ни одна из них не может продолжить.
Если обработка исключений позволяет связям продолжаться после созданиявходной поток завершается неудачно, тогда симптомы этой проблемы заключаются в том, что обе стороны блокируются в течение некоторого периода времени, одна получает исключение и переходит к созданию ObjectOutputStream.Затем другой конец может создать свой ObjectInputStream, поскольку только что поступила последовательность инициализации.
К счастью, это просто.Переместите создание ObjectOutputStream до создания ObjectInputStream.Затем каждый конец передаст последовательность инициализации, прежде чем пытаться открыть свой входной поток.Последовательность инициализации готова и ожидает, поэтому построение входного потока идет нормально, и тогда передача объекта может начаться без какой-либо задержки.