本帖最后由 刘源 于 2012-8-25 13:59 编辑
System.out.print(new String(b,0,n)); //为什么直接打印的中文是乱码
fos.write(b,0,n); //写入文本文件的中文正常
先说说,为什么fos.write(b,0,n); 正常,因为write方法,虽然接收的是一个字节数组,但底层调用的还是一字节一个字节这么往里面写的,字节流必然操作的必然是字节。
System.out.print(new String(b,0,n));而他为什么不正常?你读一个长度为5的字节数组,然后将其转换为字符串打印,然后重复一遍,这2个字符串是单独的个体,没有练习的。所以就会出现,一个字符串包含半个中文字,那一个也包含半个,就成乱码了。
最后说说怎么改:
既然你的知道writer方法好用,那你只需要把输出地址变成:OutputStream os =System.out;不就行了吗。然后用os.writer(b,0,n)方法不就输出到控制台上了 |