本帖最后由 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
|