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