黑马程序员技术交流社区
标题:
IO读取流里的一个问题
[打印本页]
作者:
陪你等日出
时间:
2013-11-26 23:31
标题:
IO读取流里的一个问题
本帖最后由 陪你等日出 于 2013-11-27 12:19 编辑
例如:
FileReader fr=new FileReader("Demo1.java");
char[] buf=new char[1024];
int num=0;
while ((num=fr.read(buf))!=-1)
{
System.out.println(new String(buf,0,num));
}
fr.close();
复制代码
感觉正常读取都要这样写,纠结在while循环判断是否读取到末尾。
但是在后面的网络编程里为什么又可以这样写呢?代码如下:
InputStream in = s.getInputStream();
byte[] buf = new byte[1024];
int len = in.read(buf);
System.out.println(new String (buf,0,len));
复制代码
这个怎么又可以不用while来判断了?
作者:
樊志伟
时间:
2013-11-27 00:47
这可能跟需求有关。
在你上面的代码中,是要连续读取Demo1.java中的内容的。
下面的代码可能只是要读取一行代码,所以没有用while循环。
我是这么理解的。
作者:
王贺
时间:
2013-11-27 08:57
InputStream in = s.getInputStream();
byte[] buf = new byte[1024];
int len = in.read(buf);
System.out.println(new String (buf,0,len));
对于是否用while这个,要看你获取的这个InputStream的大小,因为你定义的byte数组是1024,如果你获取的InputStream的数据比较大,那么你定义的这个byte数组只能读到1024个字节,其他的就读不到了,所以当数据比较大的时候,还是要用while的,当然如果数据比较小,那就1024足够了。
楼主这个是Socket吧,可能做聊天的时候数据小,就可以不用while,再比如楼主去做服务器上传功能,那数据可就大了,那会楼主就不会是否纠结while这个问题了,希望帮到你
作者:
陪你等日出
时间:
2013-11-27 12:19
王贺 发表于 2013-11-27 08:57
InputStream in = s.getInputStream();
byte[] buf = new byte[1024];
Thanks, 原来如此
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2