Transformar InputStream

6 respostas
lcsoftware

Pessoal eu trabalho com SuperWaba para palm´s e tenho q fazelos se comunicarem, escolhi ate o momento via Socket, eu consigo conectar meu cliente palm no servidor deesktop, mas no palm eu envio sempre uma string no formato de array de bytes, no servidor eu sempre pego um getInputStream e jogo dentro de um ObjectInputStream para depois dar um read, mas nesses read´s nao posso pegar um array de bytes, alguma ideia de como converter isso ai, eu so quero pegar a minha String de volta.

Aguardo resposta.

6 Respostas

saoj

Pode pegar um array de bytes sim !!! Array é serializável, desde que os objetos desse array sejam serializáveis.

Mas eu acho que eu entendi o seu problema !!! :idea:

Vc não pode jogar o seu inputstream dentro de um ObjectInputStream porque a outra ponta (o palm) não está usando um ObjectOutputStream. Essa comunicação de objetos tem todo um protocolo especial.

Não use ObjectInputStream, use um DataInputStream ou BufferedInputStream para receber bytes.

Como vc sabe que a String terminou ???

use um payload (tamanho + bytes) ou alguma sequencia de bytes no final para indicar que a string terminou, isto é, chegou por inteira.

Depois vc pega o seu array de bytes e reconstrói a sua String.

De repente vc nem precisa pegar bytes, basta colocar uma quebra de linha na sua string e converte-la para um array de bytes no palm. Aí no servidor vc pode usar direto um BufferedReader e pegar tudo com readLine(). Só tome cuidado com o charset que o seu palm está usando para converter sua string em bytes, pois pode não ser o mesmo do seu BufferedReader, mas acho que será o mesmo sim, pois vc está usando o super-SuperWaba!.

Depois me fala se era isso que estava rolando.

OBS: Depois vc vai ter que me ajudar a fazer esses programinhas maneiros para Palm tb, hein !!! :stuck_out_tongue:

lcsoftware

Perfeito saoj, estive procurando na documentacao java durante minha hora de almaco, e percebi q devo usar o DataInputStream, e assim vou pego o InputStream e instancio o DataInputStream( input ), mas e depois nao consigo continuar, me da uma luz ai, se eu conseguir eu ja posto ai.

saoj

O mais fácil seria vc enviar do palm uma string terminada com uma quebra de linha, para vc poder usar o BufferedReader com readLine().

No Palm:

String msg = "SAYHELLO\n";
byte [] data = convertToBytes(msg);
sendToMyComputer(data);

No seu desktop:

BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));

String msg = in.readLine();
System.out.println(msg);

Capite?

lcsoftware

Blza mano saoj mas ta dando esse erro aqui.

E eu nunca me deparei com um erro igual a este aqui, vc o conhece? o sabe como trata-lo

saoj

Cara, aí só se vc postar o código aqui pra gente debugar.

Como é que vc está fazendo essa comunicação com sockets ???

Vc está fechando o socket antes de dar tempo do desktop puxar a string ???

Vc está colocando a quebra de linha na String ???

Como vc está passando a sua String para bytes ???

O SuperWaba não tem PrintWriter para mandar a string sem converter para bytes ???

Pode ser um milhão de coisas !!! Posta o código aqui ou quebre a cabeça um pouco aí que vc descobre.

lcsoftware

Ta blza ai saoj to te devendo uma ai, tinha um instrução de codigo perdida, e ja resolvi, o eskema aki ta show de bola, o palm sincroniza via socket com desktop,valeu ai mano.

Criado 30 de setembro de 2004
Ultima resposta 1 de out. de 2004
Respostas 6
Participantes 2