Java IO流的FileInputStream读取文件的问题,不同写法输出不一样

利用FileInputStream的read()方法读取文件时,读出的数据强制转换时用不同的写法,在控制台得出不同的显示。

出问题的写法:
clipboard.png

正确输出的写法:
clipboard.png

以下为两种输出,错误输出是输出一串数字,正确输出是把文件内容打印出来

clipboard.png

clipboard.png

已经知道那些数字是对应字母的ASCII码

我的疑问是:同样是强制转换,为什么两种写法的结果差异这么大?

强制转换写在外面,和直接作为print()的参数,有什么区别吗?是因为print()函数还有别的处理之类的吗?

环境为:jdk-1.8-8u144 + windows10

若以上信息不足,下列为完整代码

import java.io.*;

public class TestInputstream
{
    public static void main(String[] args) {
        
        FileInputStream in = null;

        try
        {
            in = new FileInputStream("d:/计科学习/JavaPrj/IO/TestInputstream.java");
        }
        catch (FileNotFoundException e)
        {
            System.out.println("文件未找到");
            e.printStackTrace();
            System.exit(-1);
        }

        int data = 0;

        try
        {
            data = in.read();
            while((data!=-1))
            {
                //data = (char)data;        //出问题的写法
                System.out.print((char)data);
                data = in.read();
            }
            in.close();
        }
        catch (IOException e)
        {
            System.out.println("文件读取失败");
            System.exit(-1);
            e.printStackTrace();
        }
    }
}
阅读 4.4k
3 个回答
// data 是 int
int data = ...
// 所谓强转之后data 依然是 int
data = (char) data

你的dataint类型

int data = 0;一开始你就把data 声明了int类型,//data = (char)data; 你这样很可能会抛出类型转换的异常,而第一种输出的数字情况应该是你储存的文件内容从二进制转换为了十进制。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题