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


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

2   51   2011-06-07 17:14:01

2 ответа:

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

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

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

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

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