汉字所占的字节个数会随着编码格式的不同而变化,但是可以肯定地一点是,不管是什么编码格式,汉字占有的的字节个数肯定都不止一个字节,所以用字节(数组)来读取含有汉字的文件时,可能会产生乱码,下面我用数组拼接的方式来读汉字,就不会产生乱码了。上代码:
//用字节流读取文件并输出
private static void m1() throws Exception{
InputStream is = new FileInputStream("d:/abc.txt");
byte[] b = new byte[4];//用来取字节流的数组
byte[] b1 =new byte[b.length];//用来拼接字节流的数组
int cc;
boolean flag = true;//第一次进入循环,则直接把b数组拷贝给b1
while((cc = is.read(b)) != -1) {
if(flag) {
b1 = Arrays.copyOf(b, b.length);
}else {
b1 = Arrays.copyOf(b1, b1.length+cc);
System.arraycopy(b, 0, b1, b1.length-cc, cc);//给b1数组拼接
}
System.out.println(Arrays.toString(b));
System.out.println(Arrays.toString(b1));
flag = false;//从第二次循环开始,就执行else块中的代码了
}
System.out.println(new String(b1,0,b1.length));//最终打印的就是从文件取出的内容
is.close();
}
不过有一点需要注意:文件的格式必须要跟当前eclipse中的文件的格式保持一致,不然还是会乱码,utf-8对应utf-8,文件格式ANSI对应GBK或者GB2312等。