Leonardo3001:
Note que não estou falando em colocar tipos novos na linguagem Java. Estou falando que o DataInputStream deveria ter um método chamado readUnsignedShort, que lesse 2 bytes da rede, e me retornasse um int, contendo o valor desse dado sem sinal.
Mas Vini, minha argumentação se baseia no fato de que é possível ler um unsigned de um DataInputStream(link)[/url].
É verdade, tinha me esquecido desse método. Mas ainda não tem métodos como readUnsignedInt e readUnsignedLong (e esse era justamente o meu problema).
Ironicamente, esses métodos não existem na java.nio também.
Leonardo3001:
E anteriormente, você havia dito que seria possível jogar os dados de uma rede numa struct, o que eu discordo. Isso só é possível se você tiver certeza que as duas máquinas que se comunicam em rede são da mesma arquitetura. Se for o caso de um Sparc mandar dados para um Intel, então você terá que mudar o “endian” das variáveis um a um. Por isso que eu acredito que interpretação de bytes é um caso que pode ser feito melhor em Java.
Sim, verdade. Mas eu estava falando de manipulação de bytes no geral, e isso é muito prático com arquivos, por exemplo (meu exemplo foi realmente infeliz). Entretanto, no java, você também só tem o benefício do DataInputStream se for Java com Java. Se for java com máquina Sparc rodando C, aí você também vai ter que girar bytes, e essa será uma tarefa igualmente difícil com DataInputStream. Claro que o Java.nio já implementa a classe prática ByteBuffer, que faz isso por você, assim como as funções práticas do boost::asio no C++.
Aliás, geralmente, falam mal da parte de rede de C++, sendo que a maior parte das pessoas só usou os métodos nativos do SO, ou os métodos derivados do C. Uma forma bastante primitiva de usar sockets em C++. Aí, claro, fica injusto comparar as bibliotecas canhão do Java, com a arquitetura usada pelos caras que faziam TCP ainda na época do Unix.
Na verdade, é bem comum em fóruns como esse, de Java, as pessoas relatarem suas experiências traumatizantes em C, e associarem as mesmas experiências ao C++. Em termos de analogia, é como vocês reclamarem do Java, porque insistem em usar uma versão 1.0 do compilador…
Enfim, não é o caso de vocês que já tiveram experiência profissional, mas tenho certeza que parte da culpa é das próprias faculdades. Um professor dá aula de C, mal e mal esbarrando nas classes, e chama aquilo de C++. O aluno vê tudo no braço, de uma maneira que não se programa desde da época que os computadores eram medidos em megahertz. Aí, no semestre seguinte o neguinho vê Java… lógico, vai achar o negócio a quinta maravilha do mundo, e associar a imagem do C ao C++. Detalhe que esse mesmo cara sai da faculdade usando DefaultTableModel, Vector e HashTable, porque, afinal, o professor de Java dele também é um pouco defasado… 
Mas… voltando a rede, se querem ver como se faz sockets no C++ hoje em dia, vale a pena conferir essa biblioteca aqui:
http://www.boost.org/doc/libs/1_37_0/doc/html/boost_asio.html
Ali também não há chances de se esquecer de um hton e nem de um ntoh.
PS: Embora eu esteja defendendo bastante o C++ aqui, quero deixar claro que sou muito fã de Java. Aliás, continuo recomendando ele para a absurda maioria dos casos. Só que, infelizmente, muita gente ainda não conhece a forma moderna de se programar em C++, e acaba falando mal da linguagem sem qualquer conhecimento de causa. Vocês também vão achar tópicos meus falando sobre performance de Java em fóruns de C++, e explicando para eles que o Java já não é lento também desde que inventaram uma tal de hotspot vm…