A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 陪你等日出 中级黑马   /  2013-11-26 23:31  /  1436 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 陪你等日出 于 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来判断了?

3 个回复

倒序浏览
这可能跟需求有关。
在你上面的代码中,是要连续读取Demo1.java中的内容的。
下面的代码可能只是要读取一行代码,所以没有用while循环。
我是这么理解的。
回复 使用道具 举报
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 08:57
InputStream in = s.getInputStream();

                byte[] buf = new byte[1024];

Thanks, 原来如此
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马