Может быть немного сложнее, но, как я знаю, Java использует шаблон SPI 1 для сетевой подбиблиотеки. Это позволяет изменить реализацию, используемую для различных сетевых операций. Если вы используете OpenJDK, вы можете получить некоторые подсказки, как и что обернуть с вашей реализацией. Затем в вашей реализации вы замедляете ввод-вывод, например, с помощью нескольких снов.
Или, просто для удовольствия, вы можете переопределить стандартный DatagramSocket с помощью вашей измененной реализации. Иметь для него такое же имя пакета, и - как я знаю - он будет иметь приоритет над классом JRE по умолчанию. По крайней мере, этот метод работал для меня в какой-то глючной сторонней библиотеке.
Edit:
1 Интерфейс поставщика услуг - это метод разделения кода клиента и службы в API. Такое разделение допускает разные реализации клиента и разных поставщиков. Может распознаваться по имени, оканчивающемуся на Impl
, обычно, как в трассировке стека java.net.PlainDatagramSocketImpl
- это реализация провайдера, где DatagramSocket - это API на стороне клиента.
Вы прокомментировали, что не хотите полностью замедлять общение. Существует несколько способов избежать этого, например, измерить время в вашем коде и замедлить обмен данными в течение первых 1-2 минут, начиная с вашего первого входящего вызова метода. Тогда вы можете пропустить сон.
Другим вариантом было бы определить неверно работающий класс в библиотеке, JAD и исправить его. Затем замените исходный файл класса в библиотеке.