为什么字节流输出数据乱码

问题遇到的现象和发生背景

在学的时候发现一个问题,就是当我把1处代码换成2处代码时,输出的数据会出现乱码,但是我觉得这两个代码表达的是一个意思,但我不知道为什么会乱码

问题相关代码,请勿粘贴截图
       FileInputStream fis=new FileInputStream("D:\\a\\kk.txt");
//1
        int by;
       while ((by=fis.read())!=-1){
            fos.write(by);
        }
/* 2
       int by=fis.read();
        while (by!=-1){
            fos.write(by);
        }*/

我想要达到的结果

想知道为什么会乱码或者说注释部分为什么不可以这样写(理解)

第二种方式应该读不出全部数据吧,by一直没变化,是一个死循环