[dúvida] Socket + Byte + Unicode

talvez seja por falta de raciocinio lógico, mais queria ajuda para resolve um problema que estou pensando…

bem, a classe Socket oferece o metodo read, certo?

que devolve um InputStream, que possui outro metodo read, que retorna um array de bytes…

public int read(byte[] b,int off,int len);

porem, me veio a duvida, se o metodo só retorna um array de Bytes, e o byte no java é signed,

sobram apenas 255 ( -127 ao +128 ) maneiras de ter um dado (ou caractere)

então, se eu precisasse transferir dados, que precisasse de numeros maiores, por exemplo na casa dos milhoes,

como eu teria que fazer pra transferir tal dado? (de preferencia, gostaria de reiventar a roda, pois gosto de saber como funciona)

obrigado :thumbup:

edit:

aproveitando o tópico, alguem poderia me explicar porque o valor -1, usando o metodo

Integer.toBinaryString( -1 );

retorna [color=red]11111111 11111111 11111111 11111111[/color] em vez de [color=orange]10000000 00000000 00000000 00000001[/color]

sendo o bit mais a esquerda o que determina o sinal

obrigado :slight_smile:

Um tipo com mais de um byte tem… mais de um byte!

Então, se vc precisar mandar short (de 2 bytes), por exemplo, terá que colocar a parte mais significativa numa das posições do array e a mais significativa na outra. O que define qual é se a ordenação de bytes é little endian ou big endian… e isso varia de acordo com o protocolo que você estiver comunicando e o computador utilizado.

short number = 20000; byte arrShort = new byte[2]; arrShort[1] = 0x00FF & number; arrShort[0] = (0xFF00 & number) >> 2;

O número em cada posição não faz muito sentido. Ele terá que ser remontado do outro lado, para que o valor 20000 seja restaurado novamente. Esse tipo de ginástica é o que a classe ByteBuffer e o DataInputStream fazem automaticamente para você. Embora no caso do Data ele respeite a ordenação de bits do Java, enquanto no ByteBuffer você possa especificar se quer little ou big endian.

obrigado ViniGodoy

entendi agora, to baixando o source do java para da uma estudada

eeeeee, voce pode me indicar um livro, que ensina java nesse estilo de explicação?

“O número em cada posição não faz muito sentido. Ele terá que ser remontado do outro lado, para que o valor 20000 seja restaurado novamente. Esse tipo de ginástica é o que a classe ByteBuffer e o DataInputStream fazem automaticamente para você.” + a explicação da ginástica

todos os livros que tentei ler até agora explica mais ou menos assim:

“o DataInputStream vai te retorna um stream, ae voce usa o read pra receber”

fica muito “vago”, existe algum livro que explique o funcionamento de algumas classes?

nem que utilize coinceitos de baixo nivel para isso

eu sei que java foi feita para facilitar as coisas, visando o mundo capitalista de hoje, em que tempo é dinheiro

mais eu gostaria muito de saber como ela funciona, a interação dela com o os, e tudo mais

existe algum autor que publico algum livro assim?

obrigado

Cara… vc é um programador Java com coração de C++…
Geralmente, os livros de Java são meio vagos mesmo.

O ideal é você estudar livros das tecnologias em questão. Comece com um bom livro de padrões de projeto. Aí vc já vai entender muito da organização das classes do java. Para a parte de baixo nível, pegue um bom livro de TCP/IP, como o do Douglas Commer.

E se prepare para muita explicação de mais baixo nível, muitas vezes em C ou C++.