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());