2016-11-21 6 views
-2

Я экспериментирую с написанием неблокирующего клиента/сервера, о котором я заметил, что Socket обеспечивает getInputStream() и getOutputStream(), но SocketChannel предоставляет read() и write().Почему Socket использует потоки, но NIO SocketChannel использует чтение/запись?

Следующие вопросы все связаны между собой и это усилие, чтобы лучше понять ситуацию:

  • Почему эти объекты различаются в том, как при условии, что пакет данных?
  • Является ли это побочным эффектом блокировки против неблокирующего или просто отличного в реализации?
  • Это что-то, что мне нужно учитывать при принятии решения о том, как читать из сокета?
  • Могу ли я получить неполный пакет, где буфер заканчивается раньше, чем ожидалось в реализации?
+0

Нет такой вещи, как «NIO Socket». – EJP

ответ

1

Почему эти объекты отличаются тем, как предоставляются пакетные данные?

Потому что в противном случае они были бы такими же. Дизайнеры NIO чувствовали, что им необходимо инкапсулировать данные, положение, емкость и ограничение в один класс.

Является ли это побочным эффектом блокировки против неблокирования или просто отличается от реализации?

Нет и да.

Это что-то, что мне нужно учитывать при принятии решения о том, как читать из сокета?

Конечно.

Могу ли я получить неполный пакет, где буфер заканчивается раньше, чем ожидалось в реализации?

Да. Это свойство TCP/IP, а не Java.

 Смежные вопросы

  • Нет связанных вопросов^_^