黑马程序员技术交流社区
标题:
菜鸟:IO流
[打印本页]
作者:
李志广
时间:
2012-7-18 08:41
标题:
菜鸟:IO流
本帖最后由 007lzg 于 2012-7-18 14:47 编辑
import java.io.*;
class FileReaderTest
{
public static void main(String[] args) throws IOException
{
FileReader fr=null;
try
{
fr=new FileReader("FileDemo.java");
char[] buf=new char[1024];
int hasRead=0;
while((hasRead=fr.read(buf))>0)
{
System.out.println(new String(buf,0,hasRead));
}
}
catch (IOException ioe)
{
ioe.printStackTrace();
}
finally
{
if(fr!=null)
{
fr.close();
}
}
}
}
毕老师在讲课的时候总是
while((hasRead=fr.read(buf))!=-1)
,而在一些书籍上看到
while((hasRead=fr.read(buf))>0)
,我想问一下,哪一种方法更规范更合理一些呢?
作者:
康大玮
时间:
2012-7-18 09:05
API中写道
public int read(char[] cbuf)
throws IOException将字符读入数组。在某个输入可用、发生 I/O 错误或者已到达流的末尾前,此方法一直阻塞。
参数:
cbuf - 目标缓冲区
返回:
读取的字符数,如果已到达流的末尾,则返回 -1
抛出:
IOException - 如果发生 I/O 错误
我感觉毕老师的更规范
作者:
田建
时间:
2012-7-18 09:23
其实我觉得是一样的,里面的内容只是作为一个判断的条件,当读到末尾的时候就返回-1,因而用!=-1做判断就说明没达到末尾,可以继续读;而>0也能达到同样的效果,只要>0就说明读取到了内容,因而我认为这是没有差别的,皆可!
作者:
马林康
时间:
2012-7-18 09:25
两个基本没差别吧
作者:
黑马-王言龙
时间:
2012-7-18 10:21
本帖最后由 黑马-王言龙 于 2012-7-18 10:28 编辑
说规范当然是毕老师的
API文档里就是这么写的:
返回:读取的字符数,如果已到达流的末尾,则返回 -1
那如果有没有到达流的末尾,返回的就不是-1,所以才有
while((hasRead=fr.read(buf))!=-1)
,没到结尾就循环。
hasRead=fr.read(buf))>0也没问题,(=-1)的时候,也会结束循环,不是太规范(API是最权威资料)
作者:
陈少文
时间:
2012-7-18 10:40
java API
未命名.jpg
(529.51 KB, 下载次数: 40)
下载附件
2012-7-18 10:29 上传
while((hasRead=fr.read(buf))!=-1)
意思是:读取的符数,只要不到末尾,我继续读
因为到末尾,将返回-1
while((hasRead=fr.read(buf))>0)
意思是:读取字符数,只要返回的值大于0,也就是不是-1
我继续读。
">0"范围包括很多值 "!=-1"的范围只有一个值。
个人感觉用>0,不严谨,跟java API,有一些出入。
虽然在这里,表示的意思是一样的
建议,跟这API走,用 "!=-1"
作者:
程潇
时间:
2012-7-18 10:42
用!=-1更规范些,效率也高一些
作者:
柯玲
时间:
2012-7-18 10:51
首先要想为什么要用while((hasRead=fr.read(buf))!=-1)作判断,这个-1是怎么来的?
这是因为在每一个文件的结尾处都有一个windows指定的结束标示,当Windows读到数据末尾返回结束标示给java,而java根据这个结束标示返回-1,表明数据已读到结尾。
所以-1是根据java虚拟机对Windows结束标示符返回的一个表示值。
所以两种写法都对,只不过while((hasRead=fr.read(buf))!=-1)把JVM底层是怎么工作的也反映出来了。
作者:
黄丽慧
时间:
2012-7-18 11:36
1.jpg
(13.39 KB, 下载次数: 27)
下载附件
2012-7-18 11:32 上传
这个跟read方法读取内存上数据的方式有关,当读完所有的数据时,指标就会变成-1.因此,像毕老师这样的写法是比较合理的,才不会造成漏读的情况。
作者:
李志广
时间:
2012-7-18 14:47
呵呵,谢谢各位的讲解!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2