java - 使用 InputStreams 上传图像 = 内存不足错误

标签 java android

我正在尝试上传图像,但如果 Android 设备上的图像文件超过 ~2 兆,我会收到一些内存不足错误。

File file = new File(<my image file>);
FileInputStream fis = new FileInputStream(file);
HttpClient client = new HttpClient(); 
PutMethod method = new PutMethod(myUrl); 
RequestEntity requestEntity = new InputStreamRequestEntity(fis);
method.setRequestEntity(requestEntity); 
client.executeMethod(method); 

executeMethod 行发生内存不足错误。我如何更改它以读取流,而不是将整个流读入内存并导致崩溃?

hte DDMS 输出示例:

07-27 10:46:24.334: DEBUG/dalvikvm(26576): GC freed 6787 objects / 522592 bytes in 119ms
07-27 10:46:24.374: DEBUG/dalvikvm(26576): GC freed 1738 objects / 196752 bytes in 33ms
07-27 10:46:24.374: INFO/dalvikvm-heap(26576): Grow heap (frag case) to 5.184MB for 253968-byte allocation
07-27 10:46:24.414: DEBUG/dalvikvm(26576): GC freed 0 objects / 0 bytes in 45ms
07-27 10:46:24.464: DEBUG/dalvikvm(26576): GC freed 3 objects / 122992 bytes in 48ms
07-27 10:46:24.474: INFO/dalvikvm-heap(26576): Grow heap (frag case) to 5.558MB for 516112-byte allocation
07-27 10:46:24.524: DEBUG/dalvikvm(26576): GC freed 0 objects / 0 bytes in 57ms
07-27 10:46:24.574: DEBUG/dalvikvm(26576): GC freed 3 objects / 254056 bytes in 46ms
07-27 10:46:24.754: INFO/dalvikvm-heap(26576): Grow heap (frag case) to 6.308MB for 1040400-byte allocation
07-27 10:46:24.824: DEBUG/dalvikvm(26576): GC freed 3 objects / 516168 bytes in 63ms
07-27 10:46:24.894: INFO/dalvikvm-heap(26576): Grow heap (frag case) to 7.808MB for 2088976-byte allocation
07-27 10:46:24.994: DEBUG/dalvikvm(26576): GC freed 0 objects / 0 bytes in 101ms
07-27 10:46:25.034: DEBUG/dalvikvm(26576): GC freed 3 objects / 1040456 bytes in 34ms
07-27 10:46:25.084: INFO/dalvikvm-heap(26576): Grow heap (frag case) to 10.808MB for 4186128-byte allocation
07-27 10:46:25.154: DEBUG/dalvikvm(26576): GC freed 0 objects / 0 bytes in 63ms
07-27 10:46:25.434: DEBUG/dalvikvm(26576): GC freed 3 objects / 2089032 bytes in 58ms
07-27 10:46:25.714: INFO/dalvikvm-heap(26576): Grow heap (frag case) to 16.808MB for 8380432-byte allocation
07-27 10:46:25.784: DEBUG/dalvikvm(26576): GC freed 0 objects / 0 bytes in 70ms
07-27 10:46:26.204: DEBUG/dalvikvm(26576): GC freed 3 objects / 4186184 bytes in 65ms
07-27 10:46:26.204: INFO/dalvikvm-heap(26576): Forcing collection of SoftReferences for 16769040-byte allocation

最佳答案

构造不带长度的InputStreamRequestEntity会导致它在本地缓冲数据,以便确定长度。由于您将其作为文件,因此请使用 FileRequestEntity 来代替,因为它将确定文件的大小。

关于java - 使用 InputStreams 上传图像 = 内存不足错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3345476/

相关文章:

android - 找不到 [com/google/android/gms/internal/zzol] 的通用父类(super class)

Android Studio 光标显示错误

java - 如何在 Volley 上发送请求 Header 是 "Content-Type":"application/json"

android - 当设备将 "do not keep activities"设置为 ON 时如何处理?

android - 谷歌播放警告 : How to fix incorrect implementation of HostnameVerifier?

Java 7 WatchService - 忽略同一事件的多次出现

java - jquery.get 和 servlet

c# - 从 android 连接 wcf 服务时出错。错误: Failed to connect to/10. 0.2.2

java - 无法在 Appium 中安装 apk 并启动应用程序

java - 需要使用 TestNG 在 java 类中循环