baidu_39454556 2020-07-13 15:53 采纳率: 100%
浏览 76
已采纳

字节流字符流的小问题

一个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条回答 默认 最新

  • 封印di恶魔 2020-07-13 17:08
    关注

    你写入方法错了,比如你有1524个字节,第二次读的时候只读了500个字节,但是你却把剩余的524个字节也一起写入了所以大小不一样
    部分情况下,甚至会使数据错乱出现乱码
    正确的读取方式是

    f2.write(by, 0, len);
    

    你那个是以一个错误的读取方式,刚好没多写入的数据没影响你的数据显示而已,并不代表他们相等

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
  • ¥15 错误 LNK2001 无法解析的外部符号
  • ¥50 安装pyaudiokits失败
  • ¥15 计组这些题应该咋做呀
  • ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?
  • ¥15 让node服务器有自动加载文件的功能
  • ¥15 jmeter脚本回放有的是对的有的是错的
  • ¥15 r语言蛋白组学相关问题
  • ¥15 Python时间序列如何拟合疏系数模型