黑马程序员技术交流社区

标题: FileReader.read() 问题 [打印本页]

作者: 刘晓康    时间: 2012-4-1 11:41
标题: FileReader.read() 问题
FileReader fr=new FileReader("D:\\heima.txt");
int byt=fr.read();
System.out.println(byt);

read读取的是一个字节,那为什么read返回的是int类型的,而不是byte类型的?
作者: 如梦初醒    时间: 2012-4-1 11:44
因为read读取的是二进制数据
作者: 李震 李震 李震    时间: 2012-4-1 12:07

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

作者: 代臣    时间: 2012-4-1 12:49
本帖最后由 代臣 于 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, 下载次数: 149)

类型级别.JPG

作者: 代臣    时间: 2012-4-1 12:49
本帖最后由 代臣 于 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,数据类型的自动提升与表达式处在的等级有关,下面是我画的图:
希望对你有用。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2