你没有看明白文档,InputStream.available并不是说明这个流有多长,而是说这个输入流在没有Block的情况下面有多少字节可以读取出来Block的意思是指程序需要等待(例如从硬盘中读取、Socket中读入等等)所以available等于0并不说明这个流有问题

解决方案 »

  1.   

    如果inputstream的子类没有覆盖available的话,那么总是返回0
      

  2.   

    不好意思,刚刚再测试了一下.这个InputStream果然没有问题.我的写程序是这样的.
    inputStream=refFile.readBlob(5);//我自己写的BEAN就是上面返回STREAM的函数.
                int i;
                          int chunk = inputStream.available();                      //byte数组接受文件的数据
                          byte[] buffer = new byte[chunk];//注意这个地方,如果不用available的值为一般大小设为多少???是越大越好,(当然,不能超过60M),还是根据估计的文件大小设一定的值??
    假设说我的文件大小在10M左右,这里应该设多少好???                      int length = -1;
                          if (inputStream == null) {
                            System.out.println("输入流为空!!");
                          }else{
                            while ( (length = inputStream.read(buffer)) != -1) {
    //                          System.out.println("down中的数据长度是=" + length);
                              outputStream.write(buffer, 0, length); //读入流,保存在BYTe数组中
                            }
                          }
    呵,呵,,请帮忙解答一下.不胜感激~~
      

  3.   

    to:shenpipi(皮皮)什么样的情况下才会覆盖available呢???我以前写的available,好像没有出现过为0的情况.
      

  4.   

    一般子类都是按照要求覆盖InputStream的available的,但是可能在那个时候BLOBInputStream的确是没有任何内容在里面,所以它也能返回0一般byte[]这个大小不需要大的,一般1024~4096已经足够,因为即使大了也不会对性能有很大的提高