通过网络传输文件
Transferring file over network
我正在通过网络将文件(图像)从个人电脑传输到 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 似乎都可以正常打开
我认为代码在发送端进行多次 base64 编码,在接收端进行一次解码。
值得确保在发送时对整个文件只进行一次编码。
并且只有一次解码发生在接收端。
稍后您可以尝试使用 N 个编码和 N 个解码。
由于发送文件夹会发送多个文件,当开始发送新文件时,关闭前一个文件的输入流为新文件打开一个文件流,但最终下载的文件的输入流从未关闭。
我正在通过网络将文件(图像)从个人电脑传输到 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 似乎都可以正常打开
我认为代码在发送端进行多次 base64 编码,在接收端进行一次解码。
值得确保在发送时对整个文件只进行一次编码。 并且只有一次解码发生在接收端。
稍后您可以尝试使用 N 个编码和 N 个解码。
由于发送文件夹会发送多个文件,当开始发送新文件时,关闭前一个文件的输入流为新文件打开一个文件流,但最终下载的文件的输入流从未关闭。