黑马程序员技术交流社区

标题: FileReader.read()方法返回的类型讨论 [打印本页]

作者: 王运科    时间: 2012-3-26 13:50
标题: FileReader.read()方法返回的类型讨论
FileReader fr=new FileReader("D:\\heima.txt");
int byt=fr.read();
System.out.println(byt);

read读取的是一个字节,那为什么read返回的是int类型的,而不是byte类型的?
作者: 邵中国    时间: 2012-3-26 14:39
FileReader 用于以字符为单位读取文本文件
read读的是一个字符
返回值为读入字符对应的int值(0~65535)
作者: 黄奇耀    时间: 2012-3-26 14:47
如果返回byte, 同样无法表示流末尾.
byte的取值范围是从-128到127
这个范围内所有的数据, 都有可能在数据中出现
read()方法需要返回一个特殊的值来表示流末尾, 这个值不能和流中的数据重复;
字符流中读取到的char是直接当作int使用, 例如读取到一个'a'也就是97的时候, 那么就相当于返回了一个int的97,字节流中不能这么做。 因为如果文件中存在数据-1, 把-1直接当作int返回还是-1, 那么就无法区分这个读到的结果是流末尾还是流中的数了;
read()方法内部将读取到的所有字节高位补0转为int返回, 这样做所有的数据都会是正数,这时就可以用-1表示流末尾了。
而改变后的数据只要强转回byte, 就可以得到原有数据。
作者: 黄奇耀    时间: 2012-3-26 14:47
如果返回byte, 同样无法表示流末尾.
byte的取值范围是从-128到127
这个范围内所有的数据, 都有可能在数据中出现
read()方法需要返回一个特殊的值来表示流末尾, 这个值不能和流中的数据重复;
字符流中读取到的char是直接当作int使用, 例如读取到一个'a'也就是97的时候, 那么就相当于返回了一个int的97,字节流中不能这么做。 因为如果文件中存在数据-1, 把-1直接当作int返回还是-1, 那么就无法区分这个读到的结果是流末尾还是流中的数了;
read()方法内部将读取到的所有字节高位补0转为int返回, 这样做所有的数据都会是正数,这时就可以用-1表示流末尾了。
而改变后的数据只要强转回byte, 就可以得到原有数据。
作者: 落雪    时间: 2015-5-31 16:36
寻求答案来了
作者: heisedelangzi    时间: 2015-6-10 10:34
int len = fr.read(new char[2024]); 为什么会报错?




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