第一种写法:   fileLen = file.length();
   long fileRead =0;
   int read = 0;
   while(fileRead < fileLen)
   {
      read = (fileLen - fileRead > buffer.length ? buffer.length : fileLen - fileRead);
      bufferInput.read(buffer,0,read);
      bufferOutput.write(buffer,0,read);
      fileRead += read;
      //System.out.println(fileRead);
   }
   bufferOutput.close();
第二种写法:
   int read = 0;
   while( (read = bufferInput.read(buffer)) > 0 )
      bufferOutput.write(buffer,0,read);
   bufferOutput.close();第二种写法传文件没什么问题
但对于第一种写法,如果把那句System.out.println注释起来,传大文件时传到后面剩一点时就卡在while循环里了,加上System.out.println就没问题,而对于传小文件倒没什么问题。不太明白这是什么原因造成的,求大神科普~~

解决方案 »

  1.   

    前一种写法里
    bufferInput.read(buffer,0,read);
    改成
    read=bufferInput.read(buffer,0,read);跟System.out.println没关系。
    是你没根据实际的文件读取更新read变量导致fileRead值异常了……
    在文件刚好不是buffer的长度的整数倍时发生。
      

  2.   

    对于大文件,最后剩下的太少达不到 buffer.length可能就不再读了
      

  3.   


    read = (fileLen - fileRead > buffer.length ? buffer.length : fileLen - fileRead);
    这一句我已经处理了呀,读到最后剩下不足一个buffer长度时,剩多少我就读多少,另外实际的情形是加上那句System.out.println确实就没有问题了
      

  4.   

    read = (fileLen - fileRead > buffer.length ? buffer.length : fileLen - fileRead);
      

  5.   

    long readSize = bufferInput.read(buffer,0,read);
    按照缓存读取相应字节数,但是有可能读到的内容长度  readSize != read
    另外不知道会不会是java内部对long,int处理有问题。
    可以考虑升级一下jdk版本。