黑马程序员技术交流社区

标题: io中文件的读取问题 [打印本页]

作者: 沙漠里的小鱼    时间: 2012-2-27 07:44
标题: io中文件的读取问题
FileReader fw=new FileReader ("123.txt");
int ch =fw.read();
我要问的是fw.read();不是每次读取一个字符吗  为什么要对ch定义类型为int整数型  不直定义为char类型 谢谢
作者: dangfei    时间: 2012-2-27 08:10
这个不是你定义的问题,FileReader .read();返回的就是int类型。你查下ascii码表,字符跟数字都有对应关系。
作者: 老罗    时间: 2012-2-27 08:57
dangfei 发表于 2012-2-27 08:10
这个不是你定义的问题,FileReader .read();返回的就是int类型。你查下ascii码表,字符跟数字都有对应关系 ...

他的意思就是为什么返回的是int类型。
作者: b_boywindy    时间: 2012-2-27 09:25
楼上说的很有道理,字符跟数字都有对应关系,不是为什么返回char 你可以理解为  java 包里就是这么设计的  ,不过java 包里就是这么设计的 。多看一些api  你自然就理解了  
作者: tanlei200620    时间: 2012-2-27 10:54
在毕老师的视频有讲解,大抵解释如下:
public class FileReaderextends InputStreamReader , FileReader是包装了 InputStreamReader 流,但是InputStreamReader 读取的字符,如果已到达流的末尾,则返回 -1 。如果读取单个char值为-1的字符,那么误认为结束标记,这是个漏洞,所以将其值进行提升标记,达到char值为-1的字符 的提升其值不为-1,又考虑到效率,(提升的越少,那么单位数据越短,效率越高),读取之后再进行数据还原,就是把提升的东西再给去掉,结果就这样了。在视频有详解,这里稍微白话了解下。
作者: 王康    时间: 2012-2-27 11:10
本帖最后由 王康 于 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
本帖最后由 王--明 于 2012-2-27 12:40 编辑

这个问题,细分析。让我想起来了,
FileReader 中的read方法,是读取了,32位中的低8位,就是一个字符,低8位前面补了0,变成int,前面顺便多说一点
FileWriter 中的write方法呢,在这里做了个强转的动作。又转换回去了,完成写操作。
作者: 沙漠里的小鱼    时间: 2012-2-27 19:24
王康 发表于 2012-2-27 11:10
打开JDK API
java.io
-----FileReader

那为什么读取的是字符 却定义类型为int啊 我想不明白啊
作者: 沙漠里的小鱼    时间: 2012-2-27 19:25
tanlei200620 发表于 2012-2-27 10:54
在毕老师的视频有讲解,大抵解释如下:
public class FileReaderextends InputStreamReader , FileReader ...

那为什么读取的是字符 却定义类型为int啊 我想不明白啊
作者: 李晓俊老师    时间: 2012-2-27 20:57
什么玩意啊,不要误导新手啊,read()方法是字节流才有的.
read()方法返回的int是指读到的字节个数,根本不是什么char与int对应的.跟那个无关
作者: 李晓俊老师    时间: 2012-2-27 21:02
FileReader中的read()是读取到的字符的个数
作者: 李晓俊老师    时间: 2012-2-27 21:14
对不起,我错了.........学艺不精
作者: 沙漠里的小鱼    时间: 2012-2-27 21:57
李晓俊 发表于 2012-2-27 21:02
FileReader中的read()是读取到的字符的个数

哎 到底什么意思啊
作者: 李晓俊老师    时间: 2012-2-27 22:00
你可以查阅一下API文档中无参数的read()和有参数的read(byte v)的区别
,就明白了
作者: 沙漠里的小鱼    时间: 2012-2-27 22:07
王康 发表于 2012-2-27 11:10
打开JDK API
java.io
-----FileReader

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


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




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