以下是代码:
private void sendFile(InputStream file, OutputStream out) throws IOException {
Log.d(TAG, "trying to send file...");
final int buffer_size = 4096;
try {
byte[] bytes = new byte[buffer_size];
while(true) {
int count = file.read(bytes, 0, buffer_size);
if (count == -1) {
break;
}
out.write(bytes, 0, count);
Log.d("copystream", bytes + "");
}
} catch (Exception e) {
Log.e("copystream", "exception caught while sending file... " + e.getMessage());
}
}
我正在尝试在输出流上发送一个大文件(InputStream文件)(OutputStream out)。这段代码适用于较小的文件,但对于像5mb及以上的东西(我没有基准测试的限制),它只是在一段时间后没有错误或任何东西冻结。
Log.d("copystream", bytes + "");
会输出一段时间,但最终会停止记录。
Log.e("copystream", "exception caught while sending file... " + e.getMessage());
从未显示过。
这是更大代码库的一部分,实际上是在Android设备上运行的文件服务器。
有什么想法吗?
答案 0 :(得分:1)
这就是它起作用的原因:
while (true) {
synchronized (buffer) {
int amountRead = file.read(buffer);
if (amountRead == -1) {
break;
}
out.write(buffer, 0, amountRead);
}
}
答案 1 :(得分:0)
使用Multipart POST。像
这样的东西MultipartEntity entity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE, null,null);
entity.addPart("File", new FileBody (new File(FILE_PATH), MIME_TYPE));
httppost.setEntity(entity);
HttpResponse response = httpclient.execute(httppost);
return response;
答案 2 :(得分:0)
为此使用AsyncTask类,这里是链接 http://developer.android.com/reference/android/os/AsyncTask.html