黑马程序员技术交流社区

标题: IO读取流里的一个问题 [打印本页]

作者: 陪你等日出    时间: 2013-11-26 23:31
标题: IO读取流里的一个问题
本帖最后由 陪你等日出 于 2013-11-27 12:19 编辑

例如:
  1.       FileReader fr=new FileReader("Demo1.java");
  2.                 char[] buf=new char[1024];
  3.                 int num=0;
  4.                 while ((num=fr.read(buf))!=-1)
  5.                 {
  6.                         System.out.println(new String(buf,0,num));
  7.                 }
  8.                 fr.close();
复制代码

感觉正常读取都要这样写,纠结在while循环判断是否读取到末尾。
但是在后面的网络编程里为什么又可以这样写呢?代码如下:
  1. InputStream in = s.getInputStream();

  2.                 byte[] buf = new byte[1024];
  3.                 int len = in.read(buf);
  4.                 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