Socket, como saber quando esperar dados disponíveis

1 resposta
vinians

Ola pessoal!
Estou precisando resolver um problema em um aplicativo de comunicações que estou desenvolvendo. Ele esta funcionado bem mas consome muito poder de processamento pois fica em um loop até que aja dados prontos na stream.

diSTR = new DataInputStream(Conexao.getInputStream());
         doSTR = new DataOutputStream(Conexao.getOutputStream());
         conectado = true;
         int size  = 0;
         while (conectado)
         {
            while (diSTR.available() > 0)
            {
               size = diSTR.available();
               byte[] buffer = new byte[size];
               diSTR.readFully(buffer);
               String str = new String(buffer, "UTF-8");
               log("Memoria:" + Runtime.getRuntime().freeMemory());
               log(str);
            }
         }

Veja neste pedaço de código:

while (conectado)
         {
            while (diSTR.available() > 0)
            {

Quando ele cai no while externo é porque nâo ha dados disponivel para ser lido na stream e ai é que ele "come" poder de processamento inutil. O que poderia ser feito? Eu pensei em colocar um Thread.sleep(100) para que outros processos possam executar etc…
Alguma dica?

1 Resposta

Luiz_Augusto_Prado

Olá! Eu tbm já fiz desta forma e funcionou muito bem pra mim.
No meu caso, como era um chat, eu colocava Thread.sleep(5000), para esperar 5 segundos para verificar se uma banderia estava sinalizada ou não.

Criado 24 de outubro de 2014
Ultima resposta 4 de nov. de 2014
Respostas 1
Participantes 2