Если вам нужно точное количество байтов в сети, вам нужна помощь операционной системы, причем очень в зависимости от платформы.
Сетевой трафик - это набор кукол Бабушки.
URLConnection добавляет заголовок, стек TCP добавляет заголовок к каждому пакету, стек Ethernet добавляет еще один заголовок.Тогда есть подтверждение, повторные передачи и т. Д., Происходящие за спиной вашей программы.Тогда есть DNS-запросы и пакеты маршрутизации, ...
Вам понадобятся специальные правила, чтобы отделить трафик вашего приложения от остального трафика.
В целом довольнобезнадежно.
В практических целях я бы порекомендовал вам настроить приложение на машине и использовать wireshark или аналогичный для захвата трафика.Внутри вы измеряете полезную нагрузку, как вы описываете, затем используете внешние измерения для измерения накладных расходов.
Затем оцените% накладных расходов на типичное использование и добавьте их к измерению полезной нагрузки в вашем приложении.Это будет достаточно близко, чтобы никто не заметил разницу.