Ich habe mal in Java die Ausgabe einer Hardwarekommunikation auswerten müssen. (Ok, Java hab ich selber gewählt, aber eine wirkliche Wahl war das auch nicht.)
Ja, es ist schon abenteuerlich den Kram, den ein FPGA aus einer SPI-Schnittstelle rausrotzt, in Java weiterverarbeiten zu wollen. Wenn halt nur ein Byte vorgesehen ist um einen Messageframe als Userdata oder Housekeepingdata zu kennzeichnen - naja, was willste machen. Danach ein Short aus zwei Bytes um die Länge anzugeben, usw.
Aber es ging...ein Hoch auf die ByteBufferklasse, die macht es wieder relativ einfach. Das Nervigste war auch bei mir das ständige ungefragte Autogecaste. Bei der kleinsten Provokation castet Java nach int zurück, was sich bei einer Operation mit ausschließlich Bytes als Operanden nicht unbedingt erschließt.
Nachtrag:
Daß alle Datentypen in Java per Definition mit Vorzeichen sind, finde ich hingegen OK und hat mich bei meiner FPGA-Geschichte damals nicht weiter gestört. Wenn man unbedingt von 0-255 rechnen müssen können will...naja, casteste halt nach short oder int. Ist halt so. Was willste machen...und die Geräte, auf denen eine JVM läuft, sind normalerweise nicht so knapp mit Speicher alsdaß solche Optimierungen da allzuviel bringen. Und selbst wenn nicht genug Speicher da ist, macht das Javaprogramm den Kohl sicherlich auch nicht mehr fett.
Nachtrag 2:
Was mir an Java - ganz im Gegensatz zu C, wo man die Freiheit zu fast jeder Schweinerei hat - so gut gefällt, ist, daß gewisse Fehler einfach nicht mehr oder nur schwer gemacht werden können. Wieviele Unfälle sind schon passiert, weil man einen Wert >127 in ein signed Byte schreiben wollte? Ist deshalb nichtmal sogar eine Arianerakete abgeschmiert?
Nachtrag 3:
Stimmt nicht ganz, das mit der Ariane 5 war ein anderes Problem (64Bit Double in 16Bit Integer reindrücken wollen mit Operand Error Exception).