Подтвердить что ты не робот

Сокеты Java поддерживают полный дуплекс?

Возможно ли, чтобы один поток записывался в OutputStream Java Socket, а другой читал из сокета InputStream, без необходимости синхронизации потоков в сокете?

4b9b3361

Ответ 1

Конечно. Точная ситуация, о которой вы описываете, не должна быть проблемой (чтение и запись одновременно).

Как правило, поток чтения будет блокироваться, если его не читать, и может быть тайм-аут в операции чтения, если у вас установлен указанный тайм-аут.

Поскольку входной поток и выходной поток являются отдельными объектами внутри Socket, единственное, что вы можете беспокоиться, - это то, что происходит, если у вас было 2 потока, пытающихся прочитать или записать (два потока, один и тот же поток ввода/вывода) в то же время? Методы чтения/записи классов InputStream/OutputStream не синхронизированы. Возможно, однако, что если вы используете подкласс класса InputStream/OutputStream, то методы чтения/записи, которые вы вызываете, синхронизируются. Вы можете проверить javadoc для любого класса/методов, которые вы вызываете, и быстро найти это.

Ответ 2

Да, это безопасно.

Если вам нужно больше одного потока, читаемого из InputStream, вам нужно быть более осторожным (при условии, что вы читаете более одного байта за раз).