文件字节流是怎么把字节转换成字符串在文件中显示的
public class FileOutputStreamDemo2 {
public static void main(String[] args) throws IOException {
//我MyEclipse设置的默认编码方式为gbk
FileOutputStream fos = new FileOutputStream("111.txt");
String str = "java咖啡馆";
//"java咖啡馆"以gbk编码方式变成的字节数组如下:
byte[] gbkData = {106 ,97 ,118, 97, -65, -89, -73, -56, -71, -35};//共10字节
fos.write(gbkData);
//"java咖啡馆"以utf-8编码方式变成的字节数组如下:
byte[] utf8Data = {106 ,97, 118, 97, -27, -110, -106, -27, -107, -95, -23, -90, -122 };//共13字节
fos.write(utf8Data);
String str2 = new String(utf8Data);
//显示乱码
System.out.println(str2);
}
}
首先:我电脑的默认编码方式为gbk
问题1:为什么用同一个字节流往文件里面写字节,一次写10个字节,一次写13个字节,会得到同样的结果?
字节流往文件里面写字节的时候应该要按照某种编码方式把写进来的字节转换成字符吧,
10字节与13字节转换后怎么可能变成同样的结果?
问题2:既然fos.write(utf8Data);这条语句把utf-8方式得到字节数组写进文件再变成字符串的时候不显示乱码
而System.out.println(str2);这条语句由utf-8方式得到的字节数组变成字符串又显示为乱码
我的意思是:既然我电脑设置的默认编码方式为gbk,那么结果应该如下
gbkData 这个字节数组,写进文件后以gbk方式可以正常把字节数组变成"java咖啡馆"显示出来
utf8Data这个字节数组,写进文件后以gbk方式应该显示乱码
System.out.println(str2);这条语句显示乱码
请大牛帮我解惑。。。