Я написал небольшую программу, которая отправляет / получает файлы от одного клиента другому.Я настроил индикаторы выполнения как для получателя, так и для клиента, но проблема в том, что отправитель, кажется, заканчивает свой индикатор выполнения намного быстрее, чем фактическая передача.Проблема заключается в том, как он вычисляет, сколько байтов было записано.Я предполагаю, что он считает, сколько байтов я прочитал в буфер, а не байтов, которые были отправлены через сеть, так как я могу найти решение этой проблемы?Получатель вычисляет полученные байты с правильной скоростью, но отправитель не выполняет свою часть правильно.
Установка более низкого размера буфера смещает разницу немного, но это все еще не правильно.Я попытался обернуть outputtream в CountingOutputStream, но он возвращает тот же результат, что и фрагмент кода ниже.В конечном итоге передача завершается правильно, но мне нужны правильные «отправленные» значения для обновления моего индикатора выполнения, как в том, что было фактически получено и записано на диск на стороне получателя.Я включил очень урезанный фрагмент кода, который представляет мой способ вычисления переданных байтов.Любые примеры решения будут очень полезны.
try
{
int sent = 0;
Socket sk = new Socket(ip, port);
OutputStream output = sk.getOutputStream();
FileInputStream file = new FileInputStream(filepath);
byte[] buffer = new byte[8092];
while ((bytesRead = file.read(buffer)) > 0)
{
output.write(buffer, 0, bytesRead);
sent += bytesRead;
System.out.println(sent); // Shows incorrect values for the actual speed.
}
}