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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Jim-剣◆﹏ 高级黑马   /  2013-10-15 00:55  /  1219 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 Jim-剣◆﹏ 于 2013-10-15 21:10 编辑

我在学习IO流的时候,经常敲代码敲到要设置输入输出流的循环条件的时候,觉得很混乱
问题一:为什么有时候时结束条件是“!=-1”,有时候是“!=null”
问题二:返回值到底代表的是什么,为什么有时候能够要定义一个int型的变量去接收返回值,为什么有时候定义String型去接收返回值
很多问题积累下来,本想等到有网络的时候再上黑马论坛请教,顺便赚点技术分...问题存着存着,但是不搞懂敲不下去代码了,就自己研究总结了一下,不知道对不对,有不对也请黑马小伙伴们帮我指出来,我好修改我的技术博客{:soso_e113:}{:soso_e113:}


(1)到底什么时候用null什么时候用-1呢?
这个就要查阅API,弄清楚每一个read方法才可以
对于字符流
BufferedReader有三个Read(),分别是:
int read():返回int型的数据,理解为把字符强转成int返回,即数据的ASCII码,如果到达流末尾返回“-1”
int read(char[] buf):返回读到的字符数量,到达流末尾返回“-1”
String readLine():返回读到的字符串,如果到达流末尾返回“null”

FileReader也有三个Read(),分别是:
int read():返回int型的数据,理解为把字符强转成int返回,即数据的ASCII码,如果到达流末尾返回“-1”
int read(char[] buf):返回读到的字符数量,到达流末尾返回“-1”
int read(char[],int off,int len ):返回读到的字符数量,到达流末尾返回“-1”

对于字节流
FileInputStream有两个read(),分别是
int read(byte[] bt):返回读到的字节数量,到达流末尾返回“-1”
int read():返回下一字节数,到达流末尾返回“-1”

BufferedInputStream有两个read(),分别是
int read(byte[],int off,int len):返回读到的字节数量,到达流末尾返回“-1”
int read():返回下一字节数,到达流末尾返回“-1”
总结:(1)只有用BufferedReader的readLine()才会用到null,其余一律用“-1”作为结束条件
(2)对于有参数的read()方法里有数组形参“byte[]”“char ch”“byte[],int off,intlen”这三种的,返回值都是代表读取到的数据的数目
(3)read()无参数的,分两种讨论
1:字符流:返回int型的数据,理解为把字符强转成int返回,即数据的ASCII码
2:字节流:返回下一字节数


(2)到底什么时候定义int ch;
While((ch=fd.read(char))!=-1)
{}
   什么时候定义       string str=null;
While((str=bufr.readLine())!=null)
{}
观察上面的代码能够得出规律,用字符缓冲区的readLine()读取行数据时,会有一个返回值,返回值是一行字符串,String型接收,判断用“!=null”;
用字符流对象直接读取数据时,也有一个返回值,但是这个返回值是读取的个数,用int型接收,判断用“!=-1”
弄明白记清楚返回值类型和其代表的意义,可以知道什么时候用int什么时候用string


评分

参与人数 1技术分 +1 收起 理由
周志龙 + 1

查看全部评分

2 个回复

倒序浏览
1.返回值是什么类型就用什么类型的值来接收。2.对于意义,当然需要查看方法的定义:
例如:public int read(),那么返回-1,就表示读到了末尾,那么在定义循环的时候,那么就是判断不是-1的话,那么就继续读取,要是为-1,就是到了末尾,所以要结束循环,不能继续读取了,

3,那么对于String和null的意思,和这个理解相似!


希望对你有帮助!
回复 使用道具 举报
To 金牌黑马 2013-10-15 18:06:47
藤椅
楼主你好,如果问题已解决请将帖子状态修改为提问结束,如果未解决请继续提问,谢谢合作
如果不会修改请看解释帖:http://bbs.itheima.com/thread-89313-1-1.html
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马