Java输入输出流中,为什么下面这段代码读出来多了个“?”?

Java输入输出流中,为什么下面这段代码读出来多了个“?”?

代码:

//创建一个FileInputStream对象

try {

FileInputStream fis=new FileInputStream("imooc.txt");

int n=0;

while(n!=-1) {

n=fis.read();

System.out.print((char)n);

}

fis.close();

} catch (FileNotFoundException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch(IOException e) {

e.printStackTrace();

}


运行结果:

​Hello,imooc!?

正在回答

登陆购买课程后可参与讨论,去登陆

1回答

同学你好,

1、因为每次读取时,最后一次读取到的数据为-1,将-1转为char类型后显示的就是?,测试代码如下:

http://img1.sycdn.imooc.com//climg/60c84b350930786507800274.jpg

2、同学可对代码做如下优化,进行读取操作。

http://img1.sycdn.imooc.com//climg/60c84beb094d405a07810391.jpg

祝学习愉快~

  • 童真模式启动 提问者 #1

    优化后的代码是不是和下面这代码一个意思,没有什么复杂度什么的优劣性吧?

    代码:

    //创建一个FileInputStream对象

    try {

        ​FileInputStream fis=new FileInputStream("imooc.txt");

        ​int n=0;

        ​while(n!=-1) {

        ​    ​n=fis.read();

        ​    if(n==-1)

        ​    ​    ​break;

        ​    ​System.out.print((char)n);

        ​}

        ​fis.close();

    } catch (FileNotFoundException e) {

        ​// TODO Auto-generated catch block

        ​e.printStackTrace();

    } catch(IOException e) {

        ​e.printStackTrace();

    }


    2021-06-15 21:39:26
  • 同学你好,两种方式都可以解决读取文件操作,但两种方式并不完全等同,效率上差别不大。

    优化代码中循环可能一次都不执行,同学的代码中循环至少会执行一次

    例如:当文件内容为空时,优化代码中循环条件:(n=fis.read())!=-1为假,循环不会被执行;

    当文件内容为空时,同学的代码中,n的初始化值为0,循环条件:n!=-1为真,循环会执行一次。

    2021-06-16 09:36:34
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师