【发布时间】:2015-02-14 03:23:52
【问题描述】:
我正在使用链接在块中使用 HttpsURLConnection 发布大文件的 https 帖子 -
file upload using httppost android
我收到致命异常 -
06-09 11:44:47.041 E/AndroidRuntime( 6250): FATAL EXCEPTION: Thread-712
06-09 11:44:47.041 E/AndroidRuntime( 6250): java.lang.OutOfMemoryError
06-09 11:44:47.041 E/AndroidRuntime( 6250): at java.io.ByteArrayOutputStream.expand(ByteArrayOutputStream.java:91)
06-09 11:44:47.041 E/AndroidRuntime( 6250): at java.io.ByteArrayOutputStream.write(ByteArrayOutputStream.java:201)
06-09 11:44:47.041 E/AndroidRuntime( 6250): at libcore.net.http.RetryableOutputStream.write(RetryableOutputStream.java:61)
06-09 11:44:47.041 E/AndroidRuntime( 6250): at java.io.DataOutputStream.write(DataOutputStream.java:98)
HPROF 分析 -
泄密嫌疑人
“”加载的一个“libcore.net.http.RetryableOutputStream”实例占用134,216,008(82.46%)字节。内存是在“”加载的“byte[]”的一个实例中累积的。
详情
buf java.io.ByteArrayOutputStream @ 0x444fd460 16 134,215,984
content libcore.net.http.RetryableOutputStream @ 0x444fd448 24 134,216,008
out java.io.DataOutputStream @ 0x4467f918 24 48
谁能帮我解决这个问题。
我也加了DataOutputStream.flush,但没用
// read file and write to buffer
bytesRead = fileInputStream.read(buffer, 0, bufferSize);
int pktSend = 0;
// continue till bytes read not null
while (bytesRead > 0) {
dos.write(buffer, 0, bufferSize);
bytesAvailable = fileInputStream.available();
bufferSize = Math.min(bytesAvailable, maxBufferSize);
bytesRead = fileInputStream.read(buffer, 0, bufferSize);
pktSend++;
dos.flush();
}
【问题讨论】:
-
可能不相关,但你应该有:
dos.write(buffer, 0, bytesRead); -
DataOutputStream 添加 HttpUrlConnectionObject.setChunkedStreamingMode(maxBufferSize) 后卡在 write() 方法;在代码中。有人可以帮忙吗??
标签: android out-of-memory dataoutputstream httpsurlconnection