黑马程序员技术交流社区

标题: 关于字符流的read方法,求教 [打印本页]

作者: 刘士林    时间: 2012-10-29 23:08
标题: 关于字符流的read方法,求教
看毕老师的视频IO流部分,字符读取流的read()方法,让我搞不明白,如下:

FileReader fr = new FileReader("abcd.txt");
int ch = 0;//此处定义int接收,因为read()方法的返回值是int型,读取的是字符,为什么是int呢?
while((ch=fr.read())!=-1)
{
  System.out.println((char)ch);
}
fr.close();

FileReader fr = new FileReader("ab.txt");
char[] arr = new  char[1024];//定义数组接收读取到的字符,为什么定义成char类型的数组呢,不是返回int型吗?
int num = 0;
while((num=fr.read(arr))!=-1)
{
  System.out.println(new String(arr,0,num));
}
fr.close();
对字符流不是很理解,说是基于字节流,读取的是字节,只是缓冲了一下,然后去查编码表,既然查表了返回的应该就是字符了,为什么还是int型呢?
如果返回的是int型,那么就应该定义int数组接收,为什么定义char数组呢,矛盾啊!
作者: xuchulong1    时间: 2012-10-29 23:26
int ch = 0;//此处定义int接收,因为read()方法的返回值是int型,读取的是字符,为什么是int呢?
因为这个是返回接受了多少个字节,如果接受失败了,或者结束了,就返回-1了
char[] arr = new  char[1024];//定义数组接收读取到的字符,为什么定义成char类型的数组呢,不是返回int型吗?
这个里面放读取到的字符,相当于一个缓冲区

你看程序里:while((ch=fr.read())!=-1)和while((num=fr.read(arr))!=-1)两个while循环,你就没点想法吗??
第一个的ch就相当于第二个的num 不是吗?只不过第一个的read函数里面没有放参数,第二个里面放了个arr数组去接受,自己再看看jdk文档吧
作者: 杨千里    时间: 2012-10-30 00:40
看毕老师的视频IO流部分,字符读取流的read()方法,让我搞不明白,如下:

FileReader fr = new FileReader("abcd.txt");
int ch = 0;//此处定义int接收,因为read()方法的返回值是int型,读取的是字符,为什么是int呢?
// read()方法读取的是字符,读取了多少个字符,所以返回的是字符的个数,个数是int类型的,读取了多少个字符
while((ch=fr.read())!=-1)
{
System.out.println((char)ch);
}
fr.close();

FileReader fr = new FileReader("ab.txt");
char[] arr = new char[1024];//定义数组接收读取到的字符,为什么定义成char类型的数组呢,不是返回int型吗?
//把读取到的字符存起来,存的是字符,定义数组类型当然是char类型。
int num = 0;
while((num=fr.read(arr))!=-1)
{
System.out.println(new String(arr,0,num));
}
fr.close();
对字符流不是很理解,说是基于字节流,读取的是字节,只是缓冲了一下,然后去查编码表,既然查表了返回的应该就是字符了,为什么还是int型呢?
返回的是字符的个数(读取了多少个字符),存的是字符类型
如果返回的是int型,那么就应该定义int数组接收,为什么定义char数组呢,矛盾啊!
读取了一堆数据 ,这些数据有多少个?所以返回的是int 类型。
然后他们存放在数组里,数组类型为char类型。

字节流先出现的,读一个存一个。
数据多了以后,一个一个存读,一个一个的存,有点麻烦,所以就出现了字符流,先读一部分(例如读一行数据),然后在存
加入缓冲区可以提高效率。










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