Ugh, again I fight this battle. While hacking on my XML compression tool ‘rngzip’, I'm subclassing Java's input/output stream hierarchy. The read and write methods use
int instead of
byte so that we may use
-1 to represent end-of-file.
But surprisingly, Java bytes are signed. There is no way to specify unsigned numbers, and the primitive casts automatically do sign extension So when you cast a byte containing
0xFF into an integer you get
0xFFFFFFFF, which is
-1. This can cause a great many bugs, some of them not apparent until you're processing a binary stream with bytes equal to 0xFF.
The decision to use
int here is questionable too, but Java has no lightweight way to specify ‘