坦白地说,我愿意打赌,问题是您将整个缓冲区写入
FileOutputStream。传输结束时,缓冲区不会完全填满/覆盖,您最终将向最后读取的文件剩余字节写入一些字节。您需要修改此代码以仅写入实际从输入流中读取的字节数,而不是整个缓冲区。
代替
fout.write(b);
尝试
fout.write(b, 0, bytesRead);
这样,如果在最后一次读取期间仅读取100个字节,则仅写入缓冲区的前100个字节,而忽略实际上已经写入文件的其余8092个字节。

坦白地说,我愿意打赌,问题是您将整个缓冲区写入
FileOutputStream。传输结束时,缓冲区不会完全填满/覆盖,您最终将向最后读取的文件剩余字节写入一些字节。您需要修改此代码以仅写入实际从输入流中读取的字节数,而不是整个缓冲区。
代替
fout.write(b);
尝试
fout.write(b, 0, bytesRead);
这样,如果在最后一次读取期间仅读取100个字节,则仅写入缓冲区的前100个字节,而忽略实际上已经写入文件的其余8092个字节。