Estou com problemas ao usar socket,
tenho o seguinte codigo:
DataInputStream dataIn = new DataInputStream(inputStream);
dataIn.skip(30);
o dataIn.skip(int n) deveria descartar o numero de bytes relativos ao int que eu coloco como parametro, mas o proprio metodo não garante isso…
alguem sabe de alguma forma para garantir o descarte dos bytes?
Se for ver no javadoc, os metodos do InputStream e do OutputStream que recebem como parametro um array de byte, ou um int como o skip, não garantem a leitura de todos os bytes, e retornam um int com o numero de bytes lidos ou descartados… no socket existe uma função que garante a leitura de todos os bytes, em C essa função se chama MSG_WAITALL, em java, nem sei se ela foi implementada, mas acredito que sim.
T
thingol
O jeito mais bobo de garantir que você vai pular 30 bytes é ler 30 bytes (retentando a leitura caso necessário) e descartar os bytes. Já tive alguns problemas com “skip”, mas isso é porque eu estava escrevendo uma rotina de criptografia que encapsulava um InputStream.
S
stiven
É isso msm que eu faço, mas gostaria de poder usar o skip
T
thingol
Você precisa fazer um loop com skip, levando em conta a quantidade de bytes que ele conseguiu pular. (Skip e skipBytes fazem exatamente isso).
É sempre assim que se trabalha com sockets - as rotinas normalmente não garantem que vâo ler exatamente a quantidade de dados que você solicitou, podendo retornar antes. Então você tem de ir acumulando os dados já recebidos até conseguir montar as coisas do jeito que você quer.