Если вы хотите измерить пропускную способность, вам не нужно отправлять файл, вы можете просто отправить пустые данные.Если файл недостаточно велик, стоимость установления соединения (обычно 20 мс) сделает ваше соединение медленным.
Я предлагаю отправлять данные в течение не менее 2-10 секунд.
В этой статье приведен пример кода о самом быстром способе передачи данных через сокет. Насколько быстры Java-сокеты
Использование целочисленной арифметики для получения плавающей запятой может привести к ошибкам.
double kbps = (bytes / 1000) / ((end - start) / 1000);
Скажем bytes
равно 2100 иend - start
равно 1900, вы получите
double kbps = (2100 / 1000) / (1900 / 1000);
double kbps = 2 / 1; == 2.
почти то же самое, что и (но с меньшей ошибкой)
double kbps = bytes / (end - start);
лучше
double kbps = (double) bytes / (end - start);
Для отправки пустых данных
byte[] bytes = new byte[8*1024];
OutputStream out = socket.getOutputStream();
// send data for given amount of time, e.g. 2000 ms
long endTime = System.currentTimeMS() + timeToSendDataMS;
do {
out.write(bytes);
} while(endTime > System.currentTimeMS());
Для чтения пустых данных
long total = 0;
byte[] bytes = new byte[8*1024];
InputStream in = socket.getInputStream();
int len;
while((len = in.read(bytes)) != -1)
total += len;