第一种写法: 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就没问题,而对于传小文件倒没什么问题。不太明白这是什么原因造成的,求大神科普~~
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就没问题,而对于传小文件倒没什么问题。不太明白这是什么原因造成的,求大神科普~~
bufferInput.read(buffer,0,read);
改成
read=bufferInput.read(buffer,0,read);跟System.out.println没关系。
是你没根据实际的文件读取更新read变量导致fileRead值异常了……
在文件刚好不是buffer的长度的整数倍时发生。
read = (fileLen - fileRead > buffer.length ? buffer.length : fileLen - fileRead);
这一句我已经处理了呀,读到最后剩下不足一个buffer长度时,剩多少我就读多少,另外实际的情形是加上那句System.out.println确实就没有问题了
按照缓存读取相应字节数,但是有可能读到的内容长度 readSize != read
另外不知道会不会是java内部对long,int处理有问题。
可以考虑升级一下jdk版本。