A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 刘晓康 中级黑马   /  2012-4-1 11:41  /  3097 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

FileReader fr=new FileReader("D:\\heima.txt");
int byt=fr.read();
System.out.println(byt);

read读取的是一个字节,那为什么read返回的是int类型的,而不是byte类型的?

6 个回复

倒序浏览
因为read读取的是二进制数据
回复 使用道具 举报

read():从输入流中读取数据的下一个字节,返回0到255范围内的int字节值。如果因为已经到达尾流而没有可用的字节,则返回-1.在输入数据可用、检测流末尾或抛出异常前,此方法一直阻塞。
回复 使用道具 举报
read方法以-1作为末尾的标志,如果你用byte作为返回值 无符号取值范围0-255 你取不到-1;有符号取值范围-128 ~ 127 ,127-255的部分表示不了。所以需要用INT来作为返回值
回复 使用道具 举报
read
public int read()
读取单个字符。在字符可用、发生 I/O 错误或者已到达流的末尾前,此方法一直阻塞。
用于支持高效的单字符输入的子类应重写此方法。
返回:
作为整数读取的字符,范围在 0 到 65535 之间 (0x00-0xffff),如果已到达流的末尾,则返回 -1
回复 使用道具 举报
本帖最后由 代臣 于 2012-4-1 12:57 编辑

read读取单个字符,不是一个字节。
read()方法的源代码(查看jdk安装目录下src.rar文件):
    public int read() throws IOException {
        char cb[] = new char[1];
        if (read(cb, 0, 1) == -1)
            return -1;
        else
            return cb[0];//返回的是char类型的值,而方法接收返回值类型为int,会自动提升为int类型。
    }
java语言规定:当一个算数表达式中包含多个基本数据类型的值时,整个算数表达式的数据类型将发生自动提升。
自动提升规则如下:
1,所有byte型、short型、char型将被提升到int型;
2,数据类型的自动提升与表达式处在的等级有关,下面是我画的图:
希望对你有用。

类型级别.JPG (6.69 KB, 下载次数: 138)

类型级别.JPG
回复 使用道具 举报
代臣 黑马帝 2012-4-1 12:49:59
7#
本帖最后由 代臣 于 2012-4-1 12:56 编辑

read读取单个字符,不是一个字节。
read()方法的源代码(查看jdk安装目录下src.rar文件):
    public int read() throws IOException {
        char cb[] = new char[1];
        if (read(cb, 0, 1) == -1)
            return -1;
        else
            return cb[0];//返回的是char类型的值,而方法接收返回值类型为int,会自动提升为int类型。
    }
java语言规定:当一个算数表达式中包含多个基本数据类型的值时,整个算数表达式的数据类型将发生自动提升。
自动提升规则如下:
1,所有byte型、short型、char型将被提升到int型;
2,数据类型的自动提升与表达式处在的等级有关,下面是我画的图:
希望对你有用。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马