我正在尝试在下面的第一个代码示例中执行类似的操作,它是非阻塞的,但它会提供损坏的文件。第二个例子工作正常,但它是阻塞的,如果你不从客户端(另一端)关闭输出流的套接字,这是这个服务器连接到的另一个设备,那么它将阻塞并且线程执行不会走得更远。
导致它每次都生成损坏文件的第一段代码有什么问题?
第一个示例代码,好主意,但会产生损坏的文件;
while(totalBytesRead < fileSizeFromClient){
int bytesRemaining = fileSizeFromClient - totalBytesRead;
int bytesRead = bufferedInputStream.read(buffer, totalBytesRead, bytesRemaining);
bufferedOutputStream.write(buffer, totalBytesRead, bytesRemaining);
if(bytesRead == -1){
break;
}else{
totalBytesRead += bytesRead;
}
}
第二个例子,代码卡住了;块。所以我不能使用它,因为您必须从客户端终止套接字才能使代码执行继续超出这些代码行。但它会产生完美的未损坏文件。
while((count = bufferedInputStream.read(buffer)) > 0){
bufferedOutputStream.write(buffer, 0, count);
}