Я использую SocketChannel Java NIO для записи: int n = socketChannel.write(byteBuffer);
В большинстве случаев данные отправляются в одну или две части; то есть, если данные не могли быть отправлены в одной попытке, остальные данные повторяются.
Проблема здесь в том, что иногда данные отправляются не полностью за одну попытку, остальные данные при попытке отправить несколько раз, бывает, что даже после нескольких попыток ни один символ не записывается в канал наконец через некоторое время отправляются оставшиеся данные. Эти данные могут быть не большими, они могут составлять около 2000 символов.
Что может быть причиной такого поведения? Могут ли внешние факторы, такие как ОЗУ, ОС и т. Д. Стать причиной помех?
Пожалуйста, помогите мне решить эту проблему. Если требуется какая-либо другая информация, пожалуйста, дайте мне знать.
Спасибо
РЕДАКТИРОВАТЬ:
Есть ли способ в NIO SocketChannel, чтобы проверить, может ли канал быть снабжен данными для записи перед фактической записью. Намерение здесь состоит в том, что после попытки записи полных данных, если некоторые данные не были записаны на канале, перед записью оставшихся данных мы можем проверить, может ли SocketChannel принимать больше данных; поэтому вместо того, чтобы предпринимать попытки несколько раз безрезультатно, нить, ответственная за запись этих данных, может подождать или сделать что-то еще.