Java坑爹的DataOutputStream.writeBytes(String s)方法

妈的,为这个问题浪费了好几个小时的时间

java 的DataOutputStream 的 writeBytes(String s) 方法在向输出流写入中文字符时会出现问题。该方法的源代码如下:


    public final void writeBytes(String s) throws IOException {
        for (int i = 0 ; i < len ; i++) {
            out.write((byte)s.charAt(i));
         }
    }

举个例子,以字符串"你好"作为参数输入,(byte)s.charAt(i) 这句就会导致问题,因为java里的char类型是16位的,一个char可以存储一个中文字符,在将其转换为 byte后高8位会丢失,这样就无法将中文字符完整的输出到输出流中。所以在可能有中文字符输出的地方最好先将其转换为字节数组,然后再通过write(byte[] b)方法输出。例,


    String s = "你好";
    write(s.getBytes());

原文地址:http://xvm03.iteye.com/blog/649108

java DataOutputStream writeBytes 乱码
Views (6261) Comments (2) 2012-06-26
小二 :
能不能写一些能看懂的啊?
老楠 Reply to 小二 :
不要点“敲代码”这个类别嘛。
For example, "name@something.com". If someone replies to you it will be via email.
For example, "http://someaddress.com"