黑马程序员技术交流社区

标题: 一个IO流读取问题困扰很久了 坐等求解 [打印本页]

作者: 糖伯貓    时间: 2014-2-9 20:43
标题: 一个IO流读取问题困扰很久了 坐等求解
本帖最后由 糖伯貓 于 2014-2-9 20:45 编辑
  1. TCP服务器端:
复制代码
  1. ServerSocket ss = new ServerSocket(5000);
  2.                 Socket s = ss.accept();
  3.                 InputStream in = s.getInputStream();
  4.                 byte[] buf = new byte[1024];
  5.                 int len = 0;
  6.                 while((len = in.read(buf))!=-1){
  7.                 System.out.println(len);
  8.                
  9.                  System.out.println(new String(buf,0,len));
复制代码



这里while循环里面的in.read(buf)返回的是int型值,我打印了下是字符串的长度,这我也点不理解了,再比较这个长度值是否等于-1这个结束标记?




作者: 糖伯貓    时间: 2014-2-9 20:44
代码没贴上来
  1. ServerSocket ss = new ServerSocket(5000);
  2.                 Socket s = ss.accept();
  3.                 InputStream in = s.getInputStream();
  4.                 byte[] buf = new byte[1024];
  5.                 int len = 0;
  6.                 while((len = in.read(buf))!=-1){
  7.                 System.out.println(len);
  8.                
  9.                  System.out.println(new String(buf,0,len));
复制代码

作者: 李金中    时间: 2014-2-9 21:04
in.read() 方法 当读取到结束时,该方法返回-1;
作者: 李金中    时间: 2014-2-9 21:07
当 未读到结束时 ,in.read()方法返回的是你这次读取的实际长度。 很明显,用 while((len = in.read(buf))!=-1)可以达到循环读取的目的,直至读取结束,因为此时in.read()返回-1,退出while循环了就。

我解释的是你要问的不。。。

作者: 倉促、尋找你    时间: 2014-2-9 21:57
这里的-1是,当你读取数据读不到的时候,就会返回-1告诉你,已经没有数据可以读了。
作者: guhaibin    时间: 2014-2-9 22:22
in.read()的意思是读到没有数据可读时,返回-1,说明读结束了
作者: ↑↓ME→←    时间: 2014-2-9 22:43
in.read(buf)方法返回的是存储在buf缓冲区数组中的实际长度,最大等于buf的长度,当文件读取结束后返回-1,循环结束




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2