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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王运科 中级黑马   /  2012-3-26 13:50  /  9932 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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

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

5 个回复

倒序浏览
FileReader 用于以字符为单位读取文本文件
read读的是一个字符
返回值为读入字符对应的int值(0~65535)
回复 使用道具 举报
如果返回byte, 同样无法表示流末尾.
byte的取值范围是从-128到127
这个范围内所有的数据, 都有可能在数据中出现
read()方法需要返回一个特殊的值来表示流末尾, 这个值不能和流中的数据重复;
字符流中读取到的char是直接当作int使用, 例如读取到一个'a'也就是97的时候, 那么就相当于返回了一个int的97,字节流中不能这么做。 因为如果文件中存在数据-1, 把-1直接当作int返回还是-1, 那么就无法区分这个读到的结果是流末尾还是流中的数了;
read()方法内部将读取到的所有字节高位补0转为int返回, 这样做所有的数据都会是正数,这时就可以用-1表示流末尾了。
而改变后的数据只要强转回byte, 就可以得到原有数据。
回复 使用道具 举报
如果返回byte, 同样无法表示流末尾.
byte的取值范围是从-128到127
这个范围内所有的数据, 都有可能在数据中出现
read()方法需要返回一个特殊的值来表示流末尾, 这个值不能和流中的数据重复;
字符流中读取到的char是直接当作int使用, 例如读取到一个'a'也就是97的时候, 那么就相当于返回了一个int的97,字节流中不能这么做。 因为如果文件中存在数据-1, 把-1直接当作int返回还是-1, 那么就无法区分这个读到的结果是流末尾还是流中的数了;
read()方法内部将读取到的所有字节高位补0转为int返回, 这样做所有的数据都会是正数,这时就可以用-1表示流末尾了。
而改变后的数据只要强转回byte, 就可以得到原有数据。
回复 使用道具 举报
寻求答案来了
回复 使用道具 举报
int len = fr.read(new char[2024]); 为什么会报错?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马