Я бы предложил написать инструментированные InputStream и OutputStream, которые просто передают / отправляют потоки, предоставленные во время построения, при подсчете количества проходящих байтов.
Затем вы можете построить цепочку потоков со вставленным одним из вышеперечисленных - просто будьте осторожны, чтобы не иметь слишком много буферов между вашим инструментированным OutputStream и сетью, иначе вы будете считать байты, входящие в буферы, а не в сеть.
Вы также можете использовать подсчет общего количества отправленных байтов, записав еще один выходной поток, который просто отбрасывает данные и записывает ваши объекты один раз в него через ваш инструментированный выходной поток.