baidu_39454556
baidu_39454556
2020-07-13 15:53

字节流字符流的小问题

10
  • java
  • intellij-idea
  • java-ee

一个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为什么也表示“你”?将这两种字节以字节流一次写入一个字节形式写入,都可以得到“你”这个字。这是为什么呢?一个汉字用同一种编码能有两种字节表示吗?

  • 点赞
  • 回答
  • 收藏
  • 复制链接分享

2条回答

为你推荐

换一换