for(int len1  = len;len1< recev_len;len1++)
{  //recev_len 总的字符流长度
  inputStream = cs.getMessageStream();


  len = inputStream.read(buf,len1,temp_length-len1);//现在就解决从buf里面len1长度增加数据 
  System.out.println("***temp_lenth-len1***"+(temp_length-len1));
  System.out.println("***tem len****:"+len);
  len1= len1+len-1;

}read中的第三个参数过大或过小好像都不行,不知是何原因。还请各位同僚帮忙,thanks a bunch!

解决方案 »

  1.   

    temp_length是什么。
    不知道你为何要这样读取。
    read()第二个参数不说了,第三个参数是长度,但经过循环后Len1不是加1,而是先Len1+len-1然后再加1.
      

  2.   

    read
    public int read(byte[] b,
                    int off,
                    int len)
             throws IOException将输入流中最多 len 个数据字节读入 byte 数组。尝试读取 len 个字节,但读取的字节也可能小于该值。以整数形式返回实际读取的字节数。 
    在输入数据可用、检测到流末尾或者抛出异常前,此方法一直阻塞。 如果 len 为 0,则不读取任何字节并返回 0;否则,尝试读取至少一个字节。如果因为流位于文件末尾而没有可用的字节,则返回值 -1;否则,至少读取一个字节并将其存储在 b 中。 将读取的第一个字节存储在元素 b[off] 中,下一个存储在 b[off+1] 中,依次类推。读取的字节数最多等于 len。设 k 为实际读取的字节数;这些字节将存储在 b[off] 到 b[off+k-1] 的元素中,不影响 b[off+k] 到 b[off+len-1] 的元素。 在任何情况下,b[0] 到 b[off] 的元素以及 b[off+len] 到 b[b.length-1] 的元素都不会受到影响。 类 InputStream 的 read(b, off, len) 方法重复调用方法 read()。如果第一次这样的调用导致 IOException,则从对 read(b, off, len) 方法的调用中返回该异常。如果对 read() 的任何后续调用导致 IOException,则捕获该异常并将其视为到达文件末尾;到达该点时读取的字节存储在 b 中,并返回发生异常之前读取的字节数。在已读取输入数据 len 的请求数量、检测到文件结束标记、抛出异常前,此方法的默认实现将一直阻塞。建议子类提供此方法更为有效的实现。 
    参数:
    b - 读入数据的缓冲区。
    off - 数组 b 中将写入数据的初始偏移量。
    len - 要读取的最大字节数。 
    返回:
    读入缓冲区的总字节数;如果因为已到达流末尾而不再有数据可用,则返回 -1。 
    抛出: 
    IOException - 如果不是因为位于文件末尾而无法读取第一个字节;如果输入流已关闭;如果发生其他 I/O 错误。 
    NullPointerException - 如果 b 为 null。 
    IndexOutOfBoundsException - 如果 off 为负,len 为负,或者 len 大于 b.length - off
    另请参见:
    read()
      

  3.   

    学习了。
    存多少取多少,设个断点debug几次就明白了。