我在java中做了个socket的服务器,接收客户端程序用url类发送的http post请求,InputStream流读取数据,发现available()返回0,用read()还能读?我服务端接收数据有时接收不到,后来测试发现上述原因!这是我读取的部分代码:InputStream in=s.getInputStream();
String str="";
byte[] bytearray=new byte[1024];
do{

         int len=in.read(bytearray,0,1024); System.out.println("len:"+len);
System.out.println("after:"+in.available());
str=str+new String(bytearray,0,len);
if(len<1024)
break;
}while(in.available()>0 );

解决方案 »

  1.   

    类 InputStream 的 available 方法总是返回 0。 此方法应该由子类重写。 (api上的原话)
      

  2.   

    public int available()
                  throws IOException返回此输入流方法的下一个调用方可以不受阻塞地从此输入流读取(或跳过)的字节数。下一个调用方可能是同一个线程,也可能是另一个线程。 
    类 InputStream 的 available 方法总是返回 0。 此方法应该由子类重写。 
    返回:
    可以不受阻塞地从此输入流读取的字节数。 
    抛出: 
    IOException - 如果发生 I/O 错误。
      

  3.   

    BufferedInputStream in=new BufferedInputStream(s.getInputStream());
    我用这个类效果一样啊,有时收不到客户端发来的数据,只能收到http头。
      

  4.   

    available() 能反复调用吗?……
      

  5.   

    读取http post发送的数据,用BufferedReader类的readLine()方法有问题,不能读。现在不知道在循环读取时该用哪个条件做判断了?有谁做过的,请指教一下,不胜感激
      

  6.   

    有时丢数据,怎么回事?有时只能接收到http包头,不能接收包体,十次大概有1次丢数据,怎么办呢?
      

  7.   

    问题已经解决,为防止丢数据再加其他判断条件,根据收到的http包头中的content-length做判断,不根据in.available()做判断。谢谢各位了