Использовать базовый Socket / ServerSocket в SocketChannel / ServerSocketChannel? - PullRequest
0 голосов
/ 23 сентября 2011

Я пробую Java.nio-пакет для неблокирующей связи. Поэтому я получил свой ServerSocketChannel и все мои подключенные клиенты (SocketChannel) в селекторе и жду данных (OP_ACCEPT / OP_READ) с помощью Selector.select ().

Мой вопрос: могу ли я - вместо использования ByteBuffer и чтения непосредственно с помощью SocketChannel.read () - использовать базовый Socket, получить InputStream и читать с использованием этого потока? Или это испортит селектор?

1 Ответ

0 голосов
/ 23 сентября 2011

Вы не можете.

http://download.oracle.com/javase/1.4.2/docs/api/java/net/Socket.html#getInputStream%28%29

Если у этого сокета есть связанный канал, то результирующий входной поток делегирует все свои операции этому каналу. Если канал находится в неблокирующем режиме, то операции чтения входного потока сгенерируют исключение IllegalBlockingModeException.

...