思路:
客户端循环读写本地到的文件发送到服务端,然后服务端进行读写 然后将文件写到本地的磁盘中去,这样做 需要服务端 用for循环做 不能用while 循环 因为while循环会等待客户端关闭之后才能一次性的将文件写到本地!具体见下面文档。上传的图片是错误的写法
/**
* 服务端正确接收的方式
* 从指定的输入流中读取jar包的字节数据保存到指定的路径中
*
* @param bis
* @param saveJarPath
*/
private StringsaveJarFile(BufferedInputStreambis, StringsaveJarpath){
// 将获取到的字节写出到文件中去
try (BufferedOutputStreambos =new BufferedOutputStream(new FileOutputStream(saveJarpath));) {
// 首先读取8个字节
byte[]buf =newbyte[8];
bis.read(buf);
longlen = IOutils.byteArrayToLong(buf);
if (len < 1024) {
//如果len小于1024的那么我们就一次性进行读取并存入指定的文件中
buf =newbyte[(int)len];
bis.read(buf);
bos.write(buf);
System.out.println("一次性保存jar包成功");
return"1";
}else{
//如果len大于1024的那么我们级分段进行读写
intsize = (int) (len / 1024);
buf =newbyte[1024];
for (inti = 0;i < size; i++) {
bis.read(buf);
bos.write(buf);
}
//判断还有没有数据没有写出
if (len >size * 1024) {
buf = new byte[(int) (len -size * 1024)];
bis.read(buf);
bos.write(buf);
}
System.out.println("分段保存jar包成功");
return"1";
}
}catch(Exceptione) {
e.printStackTrace();
System.out.println("保存jar包失败");
return"2";
}
}