いいじまです。

> int ch;
> while((ch = r.read()) >= 0)
>    if(ch < 256) {
>     System.out.print((char)ch);

Java は私はほとんど知らないんですが、U+8000 以上の入力があったときに、
(ch < 256) という判定をしてしまって大丈夫でしょうか?

とりあえず、( (ch&255)==ch ) ないし ( (ch&~255)==0 ) とするのが無難だと
思います。

#C 言語でも、
#typedef signed short wchar_t;
#なんていう処理系がありそうで恐い……ちなみに、glibc と FreeBSD は
#wchar_t は 32 ビット、Win32 は unsigned short です。

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