黑马程序员技术交流社区
标题:
一个关于IO流中FileReader 中的问题???
[打印本页]
作者:
awkflf11
时间:
2014-3-24 23:24
标题:
一个关于IO流中FileReader 中的问题???
public class FileReaderDemo2 {
public static void main(String[] args) throws IOException {
//1,创建读取流对象和数据源关联。
FileReader fr = new FileReader("temp\\demo.txt");// txt内容 :abcde
//2,创建一个字符数组。用于存储读到字符数据。
char[] buffer = new char[1024]; //一般定义的都是1024的整数倍。一个char占两个字节
int len = 0;
while((len=fr.read(buffer))!=-1){
System.out.println(new String(buffer,0,len));
}
fr.close();
}
}
我的想问的是:while((len=fr.read(buffer))!=-1)为什么是-1???
还有System.out.println(new String(buffer,0,len));中的new String(buffer,0,len)怎么看不懂???求解
作者:
sxhs2008
时间:
2014-3-24 23:32
!= -1 的意思是,还要资源可以读取,如果是-1了就表示没有资源可以读取了,也就是读取完成了,!= -1也就是还没有读取完成,所以才会进入while中继续进行,new String(buffer,0,len) 的意思是:buffer代表char[] 数组,0代表从开头读取,len代表每次读取的byte 数 ,看下javaAPI:String(byte[] bytes, int offset, int length) 即可
作者:
lwy0319
时间:
2014-3-24 23:58
read
public int read(char[] cbuf,
int offset,
int length)
throws IOException将字符读入数组中的某一部分。
指定者:
类 Reader 中的 read
参数:
cbuf - 目标缓冲区
offset - 从其处开始存储字符的偏移量
length - 要读取的最大字符数
返回:
读取的字符数,如果已到达流的末尾,则返回 -1
抛出:
IOException - 如果发生 I/O 错误
以上是关于read方法在API文档当中的说明,至于为什么讲读到末尾规定为返回-1我也不知道。。
至于new String(buffer,0,len)是对应构造方法public String(char[] value,int offset,int count)其中buffer就是所要读取的字符数组内容了,然后从起点0开始,然后读到之前read方法的返回值len=fr.read(buffer)也就是这串数组的总长,顺便说下,如果你读取的内容比1024(参数内容)字节更多,那么返回值将等于char[]传递的1024,而想把完整的内容读完需要循环两次,你可以把1024改成1试试。
作者:
bjfanxc
时间:
2014-3-25 12:51
去看API文档,读到结尾返回的就是-1;newString(buffer,0,len)就是将你的char数组转成字符串打印出来,方便观看。
作者:
水蓝
时间:
2014-3-25 14:36
在文件读取流中,-1是文件结束的默认标志。也就是说,没有办法读到更多的信息了。
作者:
awkflf11
时间:
2014-3-25 18:00
lwy0319 发表于 2014-3-24 23:58
read
public int read(char[] cbuf,
int offset,
嗯,,,知道了。。多谢
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2