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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 马睿 于 2012-9-19 21:54 编辑
  1. ServerSocket server = new ServerSocket(11000);
  2. while(true)
  3. {
  4.     Socket client = server.accept();
  5.     sop(client.getInetAddress().getHostAddress());
  6.    
  7.     /*获得请求信息*/
  8.     InputStream inputStream_client = client.getInputStream();
  9.     BufferedInputStream buff = new BufferedInputStream(inputStream_client);
  10.     int len = buff.available();               /*问题发生在这里,获得长度为0*/
  11.     System.out.println("server:" + len);
  12.     byte b[] = new byte[1024];          /*问题发生的相关数组*/

  13.     /*这里调用buffer.read(b)也一样*/
  14.     inputStream_client.read(b);
  15.     System.out.println(new String(b));

  16.     /*输出欢迎信息*/
  17.     PrintStream outputStream = new PrintStream(client.getOutputStream(),true);
  18.     outputStream.println("你好客户端");
  19.     client.close();
  20. }
复制代码
输出结果
server:192.168.3.101
server:0
GET /myweb/dex.html HTTP/1.1
Host: 192.168.3.101:11000
Connection: keep-alive
User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding: gzip,deflate,sdch
Accept-Language: zh-CN,zh;q=0.8
Accept-Charset: GBK,utf-8;q=0.7,*;q=0.3


好的问题来了
我这里定义了一个BufferedInputStream ,装入了客户端发送过来的数据流

我想用buff.available()方法获得输入流的长度,结果得到的确是0为什么呢???????
available()
          返回可以从此输入流读取(或跳过)、且不受此输入流接下来的方法调用阻塞的估计字节数。



本来我想给一会用来读出数据的数组定义一个可变的长度len,但是这样为0的话就无法实现了

此外,既然这个流的长度是0了,那么,为什么我去read(b)的时候,还能读到东西呢????
蛋疼了。。。。难道只能定义一个足够大的数组去读么?



额外补充:
   int len = buff.available();               /*问题发生在这里,获得长度为0*/
我在这个位置如果设置断点

然后我再打开网页,去打开地址http://192.168.3.101:11000/myweb/dex.html
在断点debug模式下,却能读到长度……………………什么情况。。。?正常运行读不到?






评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

1 个回复

倒序浏览
我们知道网络是不稳定的,也就是说网络下载时,read()方法是阻塞的,说明这时我们用
available()获取不到文件的总大小,因为available()返回可以不受阻塞地从此输入流读取的字节数。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马