黑马程序员技术交流社区
标题:
关于字符流的问题
[打印本页]
作者:
黑马李杰
时间:
2013-4-8 17:39
标题:
关于字符流的问题
自从学了IO就一直不明白一个问题,虽然会写.
FileReader fr = new FileReader("test.txt");
int ch = 0;
while((ch=fr.read())=-1) {
System.out.println(char(ch));
}
这个程序的ch到底是读的什么啊?是字符长度还是字符的Ascii啊,怎么还能用char强转啊
作者:
聂益飞
时间:
2013-4-8 17:54
ch没读啊,是定义一个容器存储由fr.read读取出来的字符二进制数据啊!!!-1嘛你应该明白吧!代表读完这一行!!!至于为什么强转。因为你读取的字符数据都有相对应的编码表进行解析!解析后的东西用int型不能装啊!因为解析出来的东西已经不是数字了,可能是字母,可能是文字,也可能是其他的东西!就算有数字!也按照字符形式输出!
作者:
liuyangyang
时间:
2013-4-8 18:43
你好,
当你用Int型变量接收时,这个变量(ch)就暂存是的一个int型的数。 这个数是取出内容对应是编码号。 编码表中最大的编码号也就是占三个字节,转成10进制用int型装是可以的。
作者:
郭彦君
时间:
2013-4-8 18:44
本帖最后由 郭彦君 于 2013-4-8 18:48 编辑
这个问题你得看清楚read()这个方法,他读取到的是单个字符,会转成二进制作为返回值,返回值是int型的,如果这个int值是-1的话,代表已经读完。
你在if里用这个int值作为条件来判断是否读完,也就是说这个int值只要不等于-1,就一直读。
定义个ch就是为了接受这个值,方便操作。
QQ截图20130408184428.png
(4.51 KB, 下载次数: 40)
下载附件
2013-4-8 18:44 上传
作者:
胡国彬
时间:
2013-4-8 19:39
其实这个方法每个类中是不同的
比如,你说的这个FileReader,在这个类中,这个read方法读出来的ch就是int行的Ascii,需要转换一下.
如果是一个流的话,读出来的就是二进制数据的值.
在实际的软件开发中,大家一般习惯定义一个byte[] 数组或者char[]数据去接受数据,这样的话,会调用一个read(byte[]或者char[])的方法,这个方法返回的就是读了多少的字节数据或者字符数据.
作者:
lyg2013
时间:
2013-4-8 20:16
public int read()
throws IOException读取单个字符。在字符可用、发生 I/O 错误或者已到达流的末尾前,此方法一直阻塞。
用于支持高效的单字符输入的子类应重写此方法。
返回:
作为整数读取的字符,范围在 0 到 65535 之间 (0x00-0xffff),如果已到达流的末尾,则返回 -1
抛出:
IOException - 如果发生 I/O 错误
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2