我通过网络传输文件(图像),从PC到Android。服务器代码是:
int offset = 0;
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(requested));
byte[] temp = new byte[300];
int len;
while((len = bis.read(temp)) > 0){
byte[] data;
if(len == temp.length){
data = temp;
}
else{
data = new byte[len];
System.arraycopy(temp, 0, data, 0, len);
}
writer.println(Base64.encode(data));
}
bis.close();
和接收它的客户端(android):
byte[] bytes = Base64.decode(input, Base64.NO_WRAP);
fos.write(bytes, 0, bytes.length);
(fos变量是带文件输出流的缓冲输出流)
文件到达,并且其大小与发送的文件大小相同,但是,当在android上打开文件时,图像应用程序显示黑屏。
编辑:所有.GIF好像打开
答案 0 :(得分:0)
我认为代码在发送端进行多个base64编码,在接收端进行一次解码。
值得确保在发送时只有一个编码在完整文件上发生。 接收端只发生一次解码。
稍后您可以尝试N编码和N解码。
答案 1 :(得分:0)
由于发送文件夹会发送多个文件,当一个新文件开始发送时,前一个输入流被关闭以打开一个新文件,但是最终文件下载的输入流从未关闭。