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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 常万 中级黑马   /  2012-4-29 13:33  /  4053 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

一直没搞明白IO里面read()方法返回的是int类型,readLine()方法返回的是String类型?...为什么都不能都用如果已到达流的末尾,则返回 -1 。或者都用如果已到达流末尾,则返回 null

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

5 个回复

倒序浏览
read方法
功能:读取单个字符。
返回:作为一个整数(其范围从 0 到 65535 (0x00-0xffff))读入的字符,如果已到达流末尾,则返回 -1

readLine方法
功能:读取一个文本行。通过下列字符之一即可认为某行已终止:换行 ('\n')、回车 ('\r') 或回车后直接跟着换行。
返回:包含该行内容的字符串,不包含任何行终止符,如果已到达流末尾,则返回 null

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 周海诚 于 2012-4-29 13:49 编辑

他们的用途不一样        返回怎么会一样嫩.
首先你要弄清楚它们的用途.
名称 Read             返回类型      int                用途   从输入流读入下一个字符,至换行符结束
名称ReadlLine        返回类型     string             用途   从输入流读入下一行文本,至换行符结束
回复 使用道具 举报
你可以看看readLine方法怎么写的,
这其实很容易理解的,你想想读取一行字符的的返回值为字符串,那肯定在那readLine方法内有一个字符串缓冲用来存储每个字符,当读取到流末尾就没有数据了,
那字符串缓冲区就为null,所以你调用readline方法得判断是不是为null看到末尾了吗?
读取一个字符,当读取到末尾返回-1;返回值为int,32位,那全为111...111就为-1;而读取的每个字节都不可能为-1,因为在读取每个字节会让它与上0x000000ff转换成int;
所以读取的任何字节转换int都不可能为-1;
readLine方法对read方法包装了,但也是使用底层的read方法;即read返回值为-1都到流末尾;

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
readline()方法底层也是调用了read()方法,然后把由read()方法读到的字节存放到一个数组里面,这样的话效率会高一点。其实我们可以模拟一下readline()方法,但此处不是用的数组存放字节,而使用的StingBuilder 缓冲器  代码如下:

public  String myReadLine() throws Exception
        {
                StringBuilder sb = new StringBuilder();
                int ch = 0;
                while((ch = fr.read())!=-1)
                {
                        if(ch=='\r')
                                continue;
                        if(ch=='\n')
                                return sb.toString();
                        sb.append((char)ch);
                }
                if(sb.length()!=0)
                        return sb.toString();
                return null;
        }
当调用myReadline()方法是模拟了readline()的方法。其实也可以查看java源代码。

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
read()方法 是用一个int类型的变量来作为返回值的.
ReadLine()方法是用一个string类型的变量来作为返回值的.
read()方法是ReadLine()方法底层方法.
其实ReadLine()中也有用到Int返回类型!=-1判断条件的while循环的.
只不过他更高级 最后合并成字符串了而已.
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马