DataInputStream.read retorna quantidade de bytes errado

Olá a todos,

Eu tenho um socket, em um momento dele eu uso o DataInputStream para ler os bytes recebidos, pois bem, veja meu código:

byte[] teste = new byte[150]; int quantidade = dis.read(teste, 0, teste.lenght); System.out.println(quantidade);

Pois bem, ele retorna em quantidade nunca os 150, é sempre menos, mas ele lê todos os 150 certinho… pois o vetor fica completo com os dados que preciso.

É assim mesmo? ou estou fazendo algo errado?

Obrigado

?

Um socket normalmente nunca recebe todos os bytes de uma vez (portanto nunca espere que, enviando 150 bytes de uma vez de um lado, sejam recebidos exatamente 150 bytes em um único read).

Você deve estar fazendo alguma salada.

[quote=thingol]?

Um socket normalmente nunca recebe todos os bytes de uma vez (portanto nunca espere que, enviando 150 bytes de uma vez de um lado, sejam recebidos exatamente 150 bytes em um único read).

Você deve estar fazendo alguma salada.
[/quote]

Engraçado thingol, pois se eu debugo ele, ele passa apenas uma vez…
Estranho, mas não tem importância, só achei estranho, para mim isso não irá influenciar em nada.

Mas ele le tudo de uma vez, os 150.

Obrigado

Nunca confie nisso. No seu caso, debugando deu certo, porque deu tempo de os dados (que poderiam estar em um buffer de saída do socket ou um buffer de entrada do socket) chegarem todos.

O indicado é sempre passar o comprimento dos dados que você quer que sejam lidos do outro lado (talvez com writeInt) e então enviar os dados. O lado que recebe lê primeiro o comprimento (nesse caso com readInt) e depois os dados, acumulando-os até lê-los todos.