Есть сокеты на Java. Все данные передаются в виде объектов(хотел как проще, а вышло как обычно)
outputStream.writeObject(new Ping());
Есть задача реализовать шейпер(или подобное).
Как я вижу работу шейпера:
long x = System.nanoTime();
long BytesWrite = outputStream.writeObject(new Ping());
while((BytesWrite / (System.nanoTime() - x))>1000)
{
sleep(1);
}
Проблема в получении BytesWrite
Решаема ли она при текущем подходе?(и как?)
Есть ли смысл отказываться от такой модели и городить "свой" формат пакетов и их отправки?
Есть ли в Java что то встроенное для подобных извращений(шейпинг трафика)?
Нужно создавать ObjectOutputStream каждый раз когда передаете объект. В качестве базового потока использовать ByteArrayOutputStream (тоже каждый раз новый). Вытаскивать из него массив байт и передавать его в реальный поток.
PS: Ваш текущий код приведет к утечке памяти так как ObjectOutputStream запоминает все отправленные объекты.
PPS: Стандартная сериализация ужасна, постарайтесь избегать ее.
Сборка персонального компьютера от Artline: умный выбор для современных пользователей