我正在尝试上传一个大文件~10 MB在服务器上并意识到在2.3.4上流先写入内存然后写入服务器,我通过调查堆内存转储来确认这种行为,因此对于大文件,它会导致OutOfMemory异常。我在4.2设备上看不到相同的行为。
以下是我正在使用的代码:
URL url = new URL(uri);
connection = (HttpsURLConnection) url.openConnection();
connection.setDoOutput(true);
connection.setRequestMethod("PUT");
connection.setRequestProperty("content-type", "");
connection.setRequestProperty("Accept-Encoding", "");
connection.setFixedLengthStreamingMode((int)totalBytes);
out = new BufferedOutputStream(connection.getOutputStream());
fis = new BufferedInputStream(new FileInputStream(file));
byte[] buffer = new byte[32 * 1024];
int bytesRead = 0;
int totalBytesRead = 0;
while ((bytesRead = fis.read(buffer)) != -1)
{
totalBytesRead = totalBytesRead + bytesRead;
out.write(buffer, 0, bytesRead);// OOM Error
}
out.flush();
答案 0 :(得分:1)
我向google-android提交了一个错误,他们声称已经修复了GingerBread版本,但我仍然可以在2.3.4中复制该问题
链接到错误https://code.google.com/p/android/issues/detail?id=53946和 https://code.google.com/p/android/issues/detail?id=3164
我最终使用HttpClient进行 Eclair , Froyo , GingerBread 和 HoneyComb 及以上
的HttpURLConnection