Galera, quebro um arquivo em um array de bytes ( byte[] ) por exemplo um arquivo que tenho é quebrado em 4 partes.
Bom a hora de enviar uso:
outFile.write(bytes);
outFile = OutputStream
Para receber no servidor
try {
while (true) {
int data = in.read();
if (data == -1) {
break;
}
out.write(new byte[] { (byte) data });
}
} finally {
if (in != null) {
in.close();
}
if (out != null) {
out.close();
}
}
Tudo funciona e o arquivo é criado perfeitamente … Mas a minha pergunta é:
Como disse quebro em partes o arquivo e com o método que mando enviar para o servidor o write ele nao manda td em uma vez só, ele manda como se fosse um for byte a byte por que isso ? Não existe como enviar td em um pacote só ?
Por que, bem o que preciso fazer é lá no servidor receber tudo quebrado ainda no numero de pacotes que foram quebrados no cliente, nao to sabendo como fazer isso pois como vou duvidir td em partes lá se ele manda td junto igual. Entenderam ? Tipo se na no while do servidor tu colocar um systemout ele imprimi várias vezes e da pra ver que ele nao recebe um array de byte e sim byte a byte.
Então como vou separar os pacotes no servidor e de que maneira vou organizar isso. Saber quando acaba e começa um novo pacote que o cliente está enviando …
Oi amigo obrigado pela resposta, mas ja testou para ver se realmente ele le de uma vez ? Tenta colocar um system.out em usando read de inputstream para ver se por traz ele realmente nao le byte a byte … só se estou muito enganado.
To implementando da seguinte forma. Primeiro eu posso ter no maximo 50 bytes de envio por vez, entao faço todo um calculo do arquivo e vejo em quantas ele pode ser quebrado, exemplo 2 partes:
1 de 50 bytes - claro o maximo
e outra de 31 bytes
No servidor eu poderia grava td direto, mas antes tenho que receber igualmente no numero de partes que separei no cliente para fazer alguns calculos separados. Por isso o porque de receber no servidor os pacotes separados. So que na real ele envia tudo junto, nao recebo la os byte[] de uma vez só, como mostrei e expliquei no codigo do topico.
Fiz assim:
Antes de enviar coloco no byte[0] o numero de posicoes que vou ler até o final daquela parte do arquivo. No servidor leio a primeira posicão para ver quantos bytes tenho que ler e comeco a gravar em um array de bytes, quando termina, inicializo a leitura de novo e o proximo byte sei que é a parte que corresponde a nova sequencia de bytes que terei que ler e assim vai ate acabar … ta perfeito por enquanto
Pena qu enao consegui fazer ler de uma vez so o que envio se nao ja pegava o byte[0] e lia ele