一个GBK编码的文本,里面内容:你
1.字节流一次读取一个字节
public static void method1() throws IOException
{
FileInputStream f1 = new FileInputStream("E:\\JAVA练习\\JAVAl练习\\f.txt");
FileOutputStream f2 = new FileOutputStream("E:\\JAVA练习\\JAVAl练习\\f复制.txt");
int len;
while((len = f1.read()) != -1){
f2.write(len);
System.out.println(len);
}
f1.close();
f2.close();
}
读取出来的是196,227
2.字节流一次读取一个字节数组
public static void method2() throws IOException{
FileInputStream f1 = new FileInputStream("E:\\JAVA练习\\JAVAl练习\\f.txt");
FileOutputStream f2 = new FileOutputStream("E:\\JAVA练习\\JAVAl练习\\f复制.txt");
int len;
byte[] by = new byte[1024];
while((len = f1.read(by)) != -1){
f2.write(by);
System.out.println(Arrays.toString(by));
}
f1.close();
f2.close();
}
读取出来的是[-60, -29,]
3.转换流输出
public static void method7() throws IOException{
InputStreamReader f1 = new InputStreamReader(new FileInputStream("E:\\JAVA练习\\JAVAl练习\\f.txt"),"GBK");
OutputStreamWriter f2 = new OutputStreamWriter(new FileOutputStream("E:\\\\\\\\JAVA练习\\\\\\\\JAVAl练习\\\\\\\\f复制.txt\\"),"GBK");
int len;
f2.write(196);
f2.write(227);
f2.write(-60);
f2.write(-29);
f2.write(50403);
三个方法独立运行。
问题:1.第三段明程序为什么写进去都是乱码?50403在GBK表示的不是“你”吗?“你”的
2.第一段程序和第二段程序,GBK编码是50403,二进制是1100010011100011,为什么两次读取的输出不一样?196和227相合并为1100010011100011,-60和-29为什么也表示“你”?将这两种字节以字节流一次写入一个字节形式写入,都可以得到“你”这个字。这是为什么呢?一个汉字用同一种编码能有两种字节表示吗?