通过网络/ localhost发送大文件

时间:2012-02-14 07:57:03

标签: android inputstream large-files outputstream

以下是代码:

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设备上运行的文件服务器。

有什么想法吗?

3 个答案:

答案 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