Calcular velocidade de transferencia?

8 respostas
J

olá pessoal,

estou usando sockets para transferir arquivos, mas mostaria de saber a velocidade em q esta sendi transmitido o arquivo como faria isso ?

8 Respostas

V

Basta contar quantos bytes você enviou por segundo. Para tanto, use o método System.currentTimeMillis() e um contador.

J

tem um exemplo?

E

O tempo em System.currentTimeMillis() é em milissegundos. O valor retornado sozinho não tem significado nenhum; apenas a diferença entre dois desses valores (tempo transcorrido) é significativa.

Se você quer saber a velocidade em megabits por segundo, então divida o número de bytes por 1024*1024, multiplique pelo número de bits em um byte (que é 8), e então divida pelo número de milissegundos, e multiplique por 1000 (que é o número de milissegundos em um segundo).

Exemplo: em 23456 milissegundos, foram trafegados 1234567 bytes. A velocidade em megabits por segundo é 1234567 / (1024.0 * 1024.0) * 8 / 23456 * 1000 = 0,40 megabits/segundo.

Cuidado se o número de milissegundos der zero. Você não quer que seu programa dê um resultado de “divisão por zero”.

S

Pode utilizar FilterInputStream ou FilterOutputStream para implementar um Stream com faça esses calculos.
Como todos os bytes têm que passar por aqui é fácil contá-los. Depois com alguns métodos do tipo getVelocidade ou melhor ainda, usando o padrão Observer vc pode usar essa informação em outros objetos.

0

olha eu uso esse daki

long timeElapsed =  (System.currentTimeMillis() - timeStarted);
     downloadRate = ((downloaded / 1000.0) / (timeElapsed / 1000.0));


      NumberFormat nf = NumberFormat.getNumberInstance();
        System.out.println(nf.format( downloadRate ));
        String velocidade = nf.format( downloadRate );

basicamente funciona so tem que colocar no lugar certo do codigo senão retorna que a velocidade é infinita ou nao retorna nada XD

e downloaded é o tento que já foi baxado

J

ola pessoal,
as dicas q vcs me deram foram uteis mais ainda tenho duvidas… sera q com socket seria a melhor maneira de tranferir arquivos?
e como seria uma boa rotina q faca isso alguem tem exemplo de uma implementada com a taxa transferencia?
estou tentando otimizar aki mas ta dificil…
grato.

V

Se for via rede, você tem duas opções:
a) Transferir usando sockets (TCP/IP)
b) Transferir usando datagram sockets (UDP).

Geralmente, a transferência de arquivos usando TCP é mais rápida. O ideal é você usar um protocolo conhecido, como FTP.

No caso do Java, você pode substituir o socket pela classe SocketChannel. Geralmente é possível obter melhor escalabilidade com ela, já que suporta Selectors. Agora, ela continua usando sockets comuns.

T

Em uma rede local, para transferência de arquivos, eu recomendo usar o rsync.

Esse protocolo é incremental e se você tiver 2 diretórios sincronizados, irá mandar apenas a diferença.

http://rsync.samba.org/

Criado 22 de janeiro de 2010
Ultima resposta 26 de jan. de 2010
Respostas 8
Participantes 6