0

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

1

Вопрос:

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

1 ответ(ов)

0

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

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

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

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь