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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 沙漠里的小鱼 黑马帝   /  2012-2-27 07:44  /  2650 人查看  /  14 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

FileReader fw=new FileReader ("123.txt");
int ch =fw.read();
我要问的是fw.read();不是每次读取一个字符吗  为什么要对ch定义类型为int整数型  不直定义为char类型 谢谢

评分

参与人数 1技术分 +1 收起 理由
老罗 + 1 问题不错。

查看全部评分

14 个回复

倒序浏览

回帖奖励 +3

这个不是你定义的问题,FileReader .read();返回的就是int类型。你查下ascii码表,字符跟数字都有对应关系。

评分

参与人数 1技术分 +1 收起 理由
老罗 + 1

查看全部评分

回复 使用道具 举报
dangfei 发表于 2012-2-27 08:10
这个不是你定义的问题,FileReader .read();返回的就是int类型。你查下ascii码表,字符跟数字都有对应关系 ...

他的意思就是为什么返回的是int类型。
回复 使用道具 举报
楼上说的很有道理,字符跟数字都有对应关系,不是为什么返回char 你可以理解为  java 包里就是这么设计的  ,不过java 包里就是这么设计的 。多看一些api  你自然就理解了  
回复 使用道具 举报
在毕老师的视频有讲解,大抵解释如下:
public class FileReaderextends InputStreamReader , FileReader是包装了 InputStreamReader 流,但是InputStreamReader 读取的字符,如果已到达流的末尾,则返回 -1 。如果读取单个char值为-1的字符,那么误认为结束标记,这是个漏洞,所以将其值进行提升标记,达到char值为-1的字符 的提升其值不为-1,又考虑到效率,(提升的越少,那么单位数据越短,效率越高),读取之后再进行数据还原,就是把提升的东西再给去掉,结果就这样了。在视频有详解,这里稍微白话了解下。

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
本帖最后由 王康 于 2012-2-27 11:11 编辑

打开JDK API
java.io
-----FileReader
------------read
read
public int read()
         throws IOException读取单个字符。

覆盖:
类 Reader 中的 read
返回:
读取的字符,如果已到达流的末尾,则返回 -1 (这句很重要,通常都是读取到流的末尾,程序返回-1,这是一个标志.底层读取流返回的都是int型数据)
抛出: IOException - 如果发生 I/O 错误
回复 使用道具 举报
王--明 黑马帝 2012-2-27 11:54:53
7#
本帖最后由 王--明 于 2012-2-27 12:40 编辑

这个问题,细分析。让我想起来了,
FileReader 中的read方法,是读取了,32位中的低8位,就是一个字符,低8位前面补了0,变成int,前面顺便多说一点
FileWriter 中的write方法呢,在这里做了个强转的动作。又转换回去了,完成写操作。

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
王康 发表于 2012-2-27 11:10
打开JDK API
java.io
-----FileReader

那为什么读取的是字符 却定义类型为int啊 我想不明白啊
回复 使用道具 举报
tanlei200620 发表于 2012-2-27 10:54
在毕老师的视频有讲解,大抵解释如下:
public class FileReaderextends InputStreamReader , FileReader ...

那为什么读取的是字符 却定义类型为int啊 我想不明白啊
回复 使用道具 举报
什么玩意啊,不要误导新手啊,read()方法是字节流才有的.
read()方法返回的int是指读到的字节个数,根本不是什么char与int对应的.跟那个无关
回复 使用道具 举报
FileReader中的read()是读取到的字符的个数
回复 使用道具 举报
对不起,我错了.........学艺不精
回复 使用道具 举报
李晓俊 发表于 2012-2-27 21:02
FileReader中的read()是读取到的字符的个数

哎 到底什么意思啊
回复 使用道具 举报
你可以查阅一下API文档中无参数的read()和有参数的read(byte v)的区别
,就明白了
回复 使用道具 举报
王康 发表于 2012-2-27 11:10
打开JDK API
java.io
-----FileReader

read
public int read()
         throws IOException读取单个字符。在字符可用、发生 I/O 错误或者已到达流的末尾前,此方法一直阻塞。
用于支持高效的单字符输入的子类应重写此方法。


返回:
作为整数读取的字符,范围在 0 到 65535 之间 (0x00-0xffff),如果已到达流的末尾,则返回 -1

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马