网络 I/O 转码 
如果你的网络程序采用 TCP,那么你可以透过 Socket 类别所提供的 getInputStream() 和 getOutputStream() 来得到 InputStream 和 OutputStream 对象。如果你是在泰文版的 Windows 上,想读取用 MS950 编码的繁体中文文字 TCP 网络串流,你可以用类似上面的技巧来转码。方法如下: InputStream is = mySocket.getInputStream();
InputStreamReader reader = new InputStreamReader(is, "MS950"); 如果你的网络程序采用 UDP,你必须把中文字符串转成(或转自)byte 数组。请看下一节「 字符串和 byte 数组的转码 」。 如果你的网络程序采用 RMI,那你完全不用为这部分的转码操心,字符串直接用 Unicode 在网络上传递给另一个 JRE,不需要转码。 保持刑案现场 
如果你不知道你的 I/O 数据来源或去处是用何种编码方式,那么你最好不要用 Reader 和 Writer,而应该直接用 InputStream 和 OutputStream,因为与其被 Reader 和 Writer 胡乱编码之后造成信息遗失或错乱,不如保持数据的完整不变,留待以后进一步解读。 字符串和 byte 数组的转码 
java.lang.String 类别是 Java 字符串对象的类别,Java 字符串对象既然是活在 JRE 内部,当然就一定是用 Unicode 编码。如果你需要将 String 对象和 byte 数组互转,你可以使用: String(byte[] bytes, int offset, int length, String enc); 或 String(byte[] bytes, String enc); 来将用 enc 编码的 byte 数组,转成 Unicode 的 String 物件。你也可以使用 String 对象所提供的: byte[] getBytes(String enc) 来将 String 对象转成 byte 数组。 另外,你也可以透过 ByteArrayInputStream 或 ByteArrayOutputStream 串接到 InputStreamReader 或 OutputStreamWriter,来达到转码的目的。 本文作者:蔡学镛
张贴日期:9/23/00