いいじまです。完全に蛇足。

> > Java は私はほとんど知らないんですが、U+8000 以上の入力があったときに、
> > (ch < 256) という判定をしてしまって大丈夫でしょうか?
> 
>   Readerのread()が返す値は0〜65535、ストリームの終りがきたとき
> -1、と定められています。

C の getc() と同じような仕様ですね。

で、元のコードを見てみると、
>>> while((ch = r.read()) >= 0)
と書いてあるので、read() が signed short を返すはずはないんでした。

========================================================================
飯嶋 浩光 / でるもんた・いいじま   http://www.ht.sakura.ne.jp/~delmonta/
IIJIMA Hiromitsu, aka Delmonta           mailto:delmonta@ht.sakura.ne.jp

───【宣伝/ADVERTISEMENT】──────────────────────
Emacs カスタマイズのメールマガジン、不定期配信中。
【第27回】C-x = に不満では? 文字のJIS/EUC/SJISコードを表示するelisp。
http://www.ht.sakura.ne.jp/~delmonta/emacs/
────────────────────────────────────