黑马程序员技术交流社区

标题: IO里面的read()和readLine()方法 [打印本页]

作者: 常万    时间: 2012-4-29 13:33
标题: IO里面的read()和readLine()方法
一直没搞明白IO里面read()方法返回的是int类型,readLine()方法返回的是String类型?...为什么都不能都用如果已到达流的末尾,则返回 -1 。或者都用如果已到达流末尾,则返回 null
作者: 金超    时间: 2012-4-29 13:40
read方法
功能:读取单个字符。
返回:作为一个整数(其范围从 0 到 65535 (0x00-0xffff))读入的字符,如果已到达流末尾,则返回 -1

readLine方法
功能:读取一个文本行。通过下列字符之一即可认为某行已终止:换行 ('\n')、回车 ('\r') 或回车后直接跟着换行。
返回:包含该行内容的字符串,不包含任何行终止符,如果已到达流末尾,则返回 null
作者: 周海诚    时间: 2012-4-29 13:45
本帖最后由 周海诚 于 2012-4-29 13:49 编辑

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

作者: 根号5    时间: 2012-4-29 15:22
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源代码。
作者: 孙宇晨    时间: 2012-4-29 22:24
read()方法 是用一个int类型的变量来作为返回值的.
ReadLine()方法是用一个string类型的变量来作为返回值的.
read()方法是ReadLine()方法底层方法.
其实ReadLine()中也有用到Int返回类型!=-1判断条件的while循环的.
只不过他更高级 最后合并成字符串了而已.




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