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